kotlin @JvmOverloads

109 阅读1分钟

kotlin @JvmOverloads

一、

data class Person(val name: String, val age: Int = 1)

data class Person2 @JvmOverloads constructor(val name: String,
  val age: Int? = 0)
 val a = Person("a",1)
 val b = Person("b")

 val a1 = Person2("a",1)
 val b2 = Person2("b")
 Person a = new Person("a",1);
 Person b = new Person("b");   ❎

 Person2 a1 = new Person2("a",1);
 Person2 b2 = new Person2("b");

二、

fun f(a: String, b: Int = 0){
    ...
}

等价于Java

void f(String a, int b, String c){
}
@JvmOverloads fun f(a: String, b: Int=0){
}

等价于Java

void f(String a)
void f(String a, int b)
void f(String a, int b, String c)

@JvmStatic、@JvmField

Java中不能直接调用kotlin 中的静态方法和静态变量

@JvmName

Java调用Kotlin文件中的字段或者方法,需要在原来Kotlin文件名基础后面加Kt,加上@JvmName 就可以去掉 后面的Kt,直接文件名调用了。

//文件名:TestKotlinFile.kt val s = 2 fun abc(){}

class TestJava { private void tt() { int s = TestKotlinFileKt.getS(); TestKotlinFileKt.abc(); } }

class TestJava { private void tt() { int s = TestKotlinFile.getS(); TestKotlinFile.abc(); } }