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(); } }