Share
Embed
Java와 함께 사용하는 Kotlin
TaeHwan
July 17, 2017
Transcript
45 slides
-
Javaীࢲ Kotlin ࢎਊೡ ٸ • null /3೦ध • JvmOverloads •
Static Fields • Class ࢚ࣘ -
null // class name String.kt fun merge(a: String, b:
String) = "$a $b" -
null - javaীࢲ ࠗܳ ٸ // class name String.kt
fun merge(a: String, b: String) = "$a $b" public class Sample { @Test public void sample() { System.out.println("merge " + StringKt.merge("A", "B")); } } -
null - javaীࢲ ࠗܳ ٸ - value // class
name String.kt fun merge(a: String, b: String) = "$a $b" public class Sample { private String a = "A"; private String b = "B"; @Test public void sample() { System.out.println("merge " + StringKt.merge(a, b)); } } -
null - javaীࢲ ࠗܳ ٸ - null value //
class name String.kt fun merge(a: String, b: String) = "$a $b" public class Sample { private String a = "A"; private String b = "B"; @Before public void setUp() { a = null; } @Test public void sample() { System.out.println("merge " + StringKt.merge(a, b)); } } -
null - java ٘ value null // class name
String.kt fun merge(a: String, b: String) = "$a $b" public class Sample { private String a = "A"; private String b = "B"; @Before public void setUp() { a = null; } @Test public void sample() { System.out.println("merge " + StringKt.merge(a, b)); // java.lang.IllegalArgumentException: // Parameter specified as non-null is null: // method tech.thdev.myapplication.StringKt.merge } } -
null - javaীࢲ ࠗܳ ٸ - null value //
class name String.kt fun merge(a: String, b: String) = "$a $b" public class Sample { private String a = "A"; private String b = "B"; @Before public void setUp() { // a = null; } @Test public void sample() { a = null; System.out.println("merge " + StringKt.merge(a, b)); // ਕ ݫद : Argument 'a' might be null less... } } -
Ӓېࢲ • nullable ܻ • ? ೞաݶ ܻ оמ //
class name String.kt fun merge(a: String?, b: String?) = "$a $b" -
प೯ೞݶ ۢ • return : merge null B // class
name String.kt fun merge(a: String?, b: String?) = "$a $b" -
null ܻח? - if != null // class name String.kt
fun merge(a: String?, b: String?) = { if (a != null && b != null) { "$a $b" } } -
null ܻח? - if != null Ѿҗ • return :
merge Function0<kotlin.Unit> // class name String.kt fun merge(a: String?, b: String?) = { if (a != null && b != null) { "$a $b" } } -
null ܻח? - if != null Ѿҗ • return :
// class name String.kt fun merge(a: String?, b: String?) = { if (a != null && b != null) { "$a $b" } else { "" } } -
3೦ध • java String merge(String a, String b) { return
(a != null ? a : "a") + " " + (b != null ? b : "b"); } -
3೦ध • java String merge(String a, String b) { return
(a != null ? a : "a") + " " + (b != null ? b : "b"); } • kotlin fun merge(a: String?, b: String?) = "${a != null ? a : "a"} ${b != null ? b : "b"}" -
3೦ध • java String merge(String a, String b) { return
(a != null ? a : "a") + " " + (b != null ? b : "b"); } • kotlin fun merge(a: String?, b: String?) = "${a != null ? a : "a"} ${b != null ? b : "b"}" ޙߨ য়ܨ ߊࢤ -
3೦ध - if else ܻೞӝ // class name String.kt fun
merge(a: String?, b: String?) = "${if (a != null) a else "a"} ${if (b != null) b else "b"}" -
3೦ध - if else ܻೞӝ // class name String.kt fun
merge(a: String?, b: String?) = "${if (a != null) a else "a"} ${if (b != null) b else "b"}" ӡযࢲ फযਃ. ৈࣁਃ. -
3೦ध - if else ܻೞӝ // class name String.kt fun
merge(a: String?, b: String?) = "${if (a != null) a else "a"} ${if (b != null) b else "b"}" // class name String.kt fun merge(a: String?, b: String?) = "${a ?: "a"} ${b ?: "b"}" -
null ܻח? - ইې৬ э ܻद • return : merge
a B // class name String.kt fun merge(a: String?, b: String?) = "${a ?: "a"} ${b ?: "b"}" -
Kotlinীࢲ Java ٘ ࢎਊೡ ٸח? • Annotationਸ ੜ ਊೞ •
@Nullable/@NotNull -
JvmOverloads class Sample( val name: String, val age: Int =
0, val birthday: String = "2000-01-01") { init { println("name $name age $age birthday $birthday") } } -
JvmOverloads - javaীࢲ ೣԋ ࢎਊೞ۰ݶ? class Sample( val name: String,
val age: Int = 0, val birthday: String = "2000-01-01") { constructor(name: String, age: Int): this(name, age, "2000-01-01") constructor(name: String): this(name, 0) init { println("name $name age $age birthday $birthday") } } -
JvmOverloads - @JvmOverloads ୶оೞӝ • @JvmOverloads class Sample @JvmOverloads constructor(
val name: String, val age: Int = 0, val birthday: String = "2000-01-01") { init { println("name $name age $age birthday $birthday") } } -
JvmOverloads - function @JvmOverloads fun f(a: String, b: Int =
0, c: String = "abc") { ... } -
JvmOverloads - function ഐ java void f(String a, int b,
String c) { } void f(String a, int b) { } void f(String a) { } -
Static Fields - final static ೞӝ • const/@JvmField class Key
{ companion object { const val TYPE_ZERO = 0 @JvmField val TYPE_ONE = 1 } } -
Static Fields class Key { companion object { const val
TYPE_ZERO = 0 @JvmField val TYPE_ONE = 1 } } // Java class SampleTest { @Test public void sample() { System.out.println(Key.TYPE_ZERO); System.out.println(Key.TYPE_ONE); } } -
Class ࢚ࣘ - Java public class TestOne { public void
print() { System.out.println("TestOne"); } } -
Class ࢚ࣘ - Java > Kotlin public class TestOne {
public void print() { System.out.println("TestOne"); } } class TestTwo : TestOne() { override fun print() { super.print() print("TestTwo") } } -
Class ࢚ࣘ - Java > Kotlin > Java public class
TestOne { public void print() { System.out.println("TestOne"); } } class TestTwo : TestOne() { override fun print() { super.print() print("TestTwo") } } public class TestThree extends TestTwo { } -
Class ࢚ࣘ - Error?? • Kotlin ېझח ӝࠄਵ۽ abstract/interfaceо ইפݶ
࢚ࣘ ࠛо • openۄח ఃਕ٘ܳ ݺदਵ۽ যષਵ۽ॄ ࢚ࣘ оמ -
Class ࢚ࣘ open class TestTwo : TestOne() { override fun
print() { super.print() print("TestTwo") } } public class TestThree extends TestTwo { override fun print() { super.print() print("TestThree") } }