from java to kotlin
1.0.0
Java から Kotlin へ - Java から Kotlin へのチートシート
こんにちは、私は Amit Shekhar です。Outcome School の共同創設者です。 • IIT 2010-14 • 私は多くの開発者を教え、指導してきました。彼らの努力により、彼らは高収入のテクノロジー関連の仕事に就き、多くのテクノロジー企業が独自の問題を解決できるよう支援し、多くのオープンソース ライブラリがトップ企業によって使用されています。私は、オープンソース、ブログ、ビデオを通じて知識を共有することに情熱を持っています。
次の方法で私とつながることができます:
ジャワ
System . out . print ( "Amit Shekhar" );
System . out . println ( "Amit Shekhar" );
コトリン
print ( " Amit Shekhar " )
println ( " Amit Shekhar " )
ジャワ
String name = "Amit Shekhar" ;
final String name = "Amit Shekhar" ;
コトリン
var name = " Amit Shekhar "
val name = " Amit Shekhar "
ジャワ
String otherName ;
otherName = null ;
コトリン
var otherName : String?
otherName = null
ジャワ
if ( text != null ) {
int length = text . length ();
}
コトリン
text?. let {
val length = text.length
}
// or simply
val length = text?.length
ジャワ
String sampleString = "Shekhar" ;
if (! sampleString . isEmpty ()) {
myTextView . setText ( sampleString );
}
if ( sampleString != null && ! sampleString . isEmpty ()){
myTextView . setText ( sampleString );
}
コトリン
var sampleString = " Shekhar "
if (sampleString.isNotEmpty()){ // the feature of kotlin extension function
myTextView.text = sampleString
}
if ( ! sampleString.isNullOrEmpty()){
myTextView.text = sampleString
}
ジャワ
String firstName = "Amit" ;
String lastName = "Shekhar" ;
String message = "My name is: " + firstName + " " + lastName ;
コトリン
var firstName = " Amit "
var lastName = " Shekhar "
var message = " My name is: $firstName $lastName "
ジャワ
String text = "First Line n " +
"Second Line n " +
"Third Line" ;
コトリン
val text = """
|First Line
|Second Line
|Third Line
""" .trimMargin()
ジャワ
String str = "Java to Kotlin Guide" ;
String substr = "" ;
//print java
substr = str . substring ( 0 , 4 );
System . out . println ( "substring = " + substr );
//print kotlin
substr = str . substring ( 8 , 14 );
System . out . println ( "substring = " + substr );
コトリン
var str = " Java to Kotlin Guide "
var substr = " "
// print java
substr = str.substring( 0 .. 3 ) //
println ( " substring $substr " )
// print kotlin
substr = str.substring( 8 .. 13 )
println ( " substring $substr " )
ジャワ
String text = x > 5 ? "x > 5" : "x <= 5" ;
String message = null ;
log ( message != null ? message : "" );
コトリン
val text = if (x > 5 ) " x > 5 " else " x <= 5 "
val message : String? = null
log(message ? : " " )
ジャワ
final int andResult = a & b ;
final int orResult = a | b ;
final int xorResult = a ^ b ;
final int rightShift = a >> 2 ;
final int leftShift = a << 2 ;
final int unsignedRightShift = a >>> 2 ;
コトリン
val andResult = a and b
val orResult = a or b
val xorResult = a xor b
val rightShift = a shr 2
val leftShift = a shl 2
val unsignedRightShift = a ushr 2
ジャワ
if ( object instanceof Car ) {
Car car = ( Car ) object ;
}
コトリン
if ( object is Car) {
var car = object as Car
}
// if object is null
var car = object as ? Car // var car = object as Car?
ジャワ
if ( object instanceof Car ) {
Car car = ( Car ) object ;
}
コトリン
if ( object is Car) {
var car = object // smart casting
}
// if object is null
if ( object is Car?) {
var car = object // smart casting, car will be null
}
ジャワ
if ( score >= 0 && score <= 300 ) { }
コトリン
if (score in 0 .. 300 ) { }
ジャワ
int score = // some score;
String grade ;
switch ( score ) {
case 10 :
case 9 :
grade = "Excellent" ;
break ;
case 8 :
case 7 :
case 6 :
grade = "Good" ;
break ;
case 5 :
case 4 :
grade = "OK" ;
break ;
case 3 :
case 2 :
case 1 :
grade = "Fail" ;
break ;
default :
grade = "Fail" ;
}
コトリン
var score = // some score
var grade = when (score) {
9 , 10 -> " Excellent "
in 6 .. 8 -> " Good "
4 , 5 -> " OK "
else -> " Fail "
}
ジャワ
for ( int i = 1 ; i <= 10 ; i ++) { }
for ( int i = 1 ; i < 10 ; i ++) { }
for ( int i = 10 ; i >= 0 ; i --) { }
for ( int i = 1 ; i <= 10 ; i += 2 ) { }
for ( int i = 10 ; i >= 0 ; i -= 2 ) { }
for ( String item : collection ) { }
for ( Map . Entry < String , String > entry : map . entrySet ()) { }
コトリン
for (i in 1 .. 10 ) { }
for (i in 1 until 10 ) { }
for (i in 10 downTo 0 ) { }
for (i in 1 .. 10 step 2 ) { }
for (i in 10 downTo 0 step 2 ) { }
for (item in collection) { }
for ((key, value) in map) { }
ジャワ
final List < Integer > listOfNumber = Arrays . asList ( 1 , 2 , 3 , 4 );
final Map < Integer , String > keyValue = new HashMap < Integer , String >();
map . put ( 1 , "Amit" );
map . put ( 2 , "Anand" );
map . put ( 3 , "Messi" );
// Java 9
final List < Integer > listOfNumber = List . of ( 1 , 2 , 3 , 4 );
final Map < Integer , String > keyValue = Map . of ( 1 , "Amit" ,
2 , "Anand" ,
3 , "Messi" );
コトリン
val listOfNumber = listOf ( 1 , 2 , 3 , 4 )
val keyValue = mapOf ( 1 to " Amit " ,
2 to " Anand " ,
3 to " Messi " )
ジャワ
// Java 7 and below
for ( Car car : cars ) {
System . out . println ( car . speed );
}
// Java 8+
cars . forEach ( car -> System . out . println ( car . speed ));
// Java 7 and below
for ( Car car : cars ) {
if ( car . speed > 100 ) {
System . out . println ( car . speed );
}
}
// Java 8+
cars . stream (). filter ( car -> car . speed > 100 ). forEach ( car -> System . out . println ( car . speed ));
cars . parallelStream (). filter ( car -> car . speed > 100 ). forEach ( car -> System . out . println ( car . speed ));
コトリン
cars.forEach {
println (it.speed)
}
cars.filter { it.speed > 100 }
.forEach { println (it.speed)}
// kotlin 1.1+
cars.stream().filter { it.speed > 100 }.forEach { println (it.speed)}
cars.parallelStream().filter { it.speed > 100 }.forEach { println (it.speed)}
ジャワ
String [] splits = "param=car" . split ( "=" );
String param = splits [ 0 ];
String value = splits [ 1 ];
コトリン
val (param, value) = " param=car " .split( " = " )
ジャワ
void doSomething () {
// logic here
}
コトリン
fun doSomething () {
// logic here
}
ジャワ
double calculateCost ( int quantity , double pricePerItem ) {
return pricePerItem * quantity ;
}
double calculateCost ( int quantity ) {
// default price is 20.5
return 20.5 * quantity ;
}
コトリン
fun calculateCost ( quantity : Int , pricePerItem : Double = 20.5) = quantity * pricePerItem
calculateCost( 10 , 25.0 ) // 250
calculateCost( 10 ) // 205
ジャワ
void doSomething ( int ... numbers ) {
// logic here
}
コトリン
fun doSomething ( vararg numbers : Int ) {
// logic here
}
ジャワ
int getScore () {
// logic here
return score ;
}
コトリン
fun getScore (): Int {
// logic here
return score
}
// as a single-expression function
fun getScore (): Int = score
// even simpler (type will be determined automatically)
fun getScore () = score // return-type is Int
ジャワ
int getScore ( int value ) {
// logic here
return 2 * value ;
}
コトリン
fun getScore ( value : Int ): Int {
// logic here
return 2 * value
}
// as a single-expression function
fun getScore ( value : Int ): Int = 2 * value
// even simpler (type will be determined automatically)
fun getScore ( value : Int ) = 2 * value // return-type is int
ジャワ
public class Utils {
private Utils () {
// This utility class is not publicly instantiable
}
public static int getScore ( int value ) {
return 2 * value ;
}
}
コトリン
class Utils private constructor() {
companion object {
fun getScore ( value : Int ): Int {
return 2 * value
}
}
}
// another way
object Utils {
fun getScore ( value : Int ): Int {
return 2 * value
}
}
ジャワ
public class Developer {
private String name ;
private int age ;
public Developer ( String name , int age ) {
this . name = name ;
this . age = age ;
}
public String getName () {
return name ;
}
public void setName ( String name ) {
this . name = name ;
}
public int getAge () {
return age ;
}
public void setAge ( int age ) {
this . age = age ;
}
@ Override
public boolean equals ( Object o ) {
if ( this == o ) return true ;
if ( o == null || getClass () != o . getClass ()) return false ;
Developer developer = ( Developer ) o ;
if ( age != developer . age ) return false ;
return name != null ? name . equals ( developer . name ) : developer . name == null ;
}
@ Override
public int hashCode () {
int result = name != null ? name . hashCode () : 0 ;
result = 31 * result + age ;
return result ;
}
@ Override
public String toString () {
return "Developer{" +
"name='" + name + ''' +
", age=" + age +
'}' ;
}
}
コトリン
data class Developer ( var name : String , var age : Int )
ジャワ
public class Developer implements Cloneable {
private String name ;
private int age ;
public Developer ( String name , int age ) {
this . name = name ;
this . age = age ;
}
@ Override
protected Object clone () throws CloneNotSupportedException {
return ( Developer ) super . clone ();
}
}
// cloning or copying
Developer dev = new Developer ( "Messi" , 30 );
try {
Developer dev2 = ( Developer ) dev . clone ();
} catch ( CloneNotSupportedException e ) {
// handle exception
}
コトリン
data class Developer ( var name : String , var age : Int )
// cloning or copying
val dev = Developer ( " Messi " , 30 )
val dev2 = dev.copy()
// in case you only want to copy selected properties
val dev2 = dev.copy(age = 25 )
ジャワ
// Example #1
interface SomeInterface < T > {
void doSomething ( T data );
}
class SomeClass implements SomeInterface < String > {
@ Override
public void doSomething ( String data ) {
// some logic
}
}
// Example #2
interface SomeInterface < T extends Collection <?>> {
void doSomething ( T data );
}
class SomeClass implements SomeInterface < List < String >> {
@ Override
public void doSomething ( List < String > data ) {
// some logic
}
}
コトリン
interface SomeInterface < T > {
fun doSomething ( data : T )
}
class SomeClass : SomeInterface < String > {
override fun doSomething ( data : String ) {
// some logic
}
}
interface SomeInterface < T : Collection < * >> {
fun doSomething ( data : T )
}
class SomeClass : SomeInterface < List < String >> {
override fun doSomething ( data : List < String >) {
// some logic
}
}
ジャワ
public class Utils {
private Utils () {
// This utility class is not publicly instantiable
}
public static int triple ( int value ) {
return 3 * value ;
}
}
int result = Utils . triple ( 3 );
コトリン
fun Int. triple (): Int {
return this * 3
}
var result = 3 .triple()
ジャワ
Person person ;
コトリン
internal lateinit var person : Person
ジャワ
public enum Direction {
NORTH ( 1 ),
SOUTH ( 2 ),
WEST ( 3 ),
EAST ( 4 );
int direction ;
Direction ( int direction ) {
this . direction = direction ;
}
public int getDirection () {
return direction ;
}
}
コトリン
enum class Direction ( val direction : Int ) {
NORTH ( 1 ),
SOUTH ( 2 ),
WEST ( 3 ),
EAST ( 4 );
}
ジャワ
List < Profile > profiles = loadProfiles ( context );
Collections . sort ( profiles , new Comparator < Profile >() {
@ Override
public int compare ( Profile profile1 , Profile profile2 ) {
if ( profile1 . getAge () > profile2 . getAge ()) return 1 ;
if ( profile1 . getAge () < profile2 . getAge ()) return - 1 ;
return 0 ;
}
});
コトリン
val profile = loadProfiles(context)
profile.sortedWith( Comparator ({ profile1, profile2 ->
if (profile1.age > profile2.age) return @Comparator 1
if (profile1.age < profile2.age) return @Comparator - 1
return @Comparator 0
}))
ジャワ
AsyncTask < Void , Void , Profile > task = new AsyncTask < Void , Void , Profile >() {
@ Override
protected Profile doInBackground ( Void ... voids ) {
// fetch profile from API or DB
return null ;
}
@ Override
protected void onPreExecute () {
super . onPreExecute ();
// do something
}
};
コトリン
val task = object : AsyncTask < Void , Void , Profile >() {
override fun doInBackground ( vararg voids : Void ): Profile ? {
// fetch profile from API or DB
return null
}
override fun onPreExecute () {
super .onPreExecute()
// do something
}
}
ジャワ
public class User {
{ //Initialization block
System . out . println ( "Init block" );
}
}
コトリン
class User {
init { // Initialization block
println ( " Init block " )
}
}
Copyright (C) 2024 Amit Shekhar
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
プルリクエストを行うだけです。入っていますよ!