目录:
1、Kotlin没有封装类
2、Kotlin类型空值敏感
3、Kotlin没有静态变量与静态方法
1、Kotlin没有封装类
A.java:
public class A implements AInterface{
public static final A a = new A();
@Override
public void putNumber(int num){
System.out.println("int");
}
@Override
public void putNumber(Integer num){
System.out.println("Integer");
}
}
- 如果创建一个A.kt去实现AInterface,那么只需实现非封装类的那个函数就行了。
A.kt:
class A:AInterface{
override fun putNumber(num:Int){
println("int")
}
}
- 可通过反射去调用Java的封装类。
2、Kotlin类型空值敏感
A.java
public class A {
public static String format(String string){
return string.isEmpty()?null : string;
}
}
Test.kt
fun function(str:String){
val fmt1 = format(str)
val fmt2:String = format(str)//手动声明无符号的类型
val fmt3:String? = format(str)//可空类型
//1、str为空
println(fmt1.length)//报NullPointerException,因为String!是兼容类型,会按照java的语法特性去执行
println(fmt3?.length)//输出null,正常执行
}
- fmt1的类型是String!兼容类型,该类型无法手动声明,是编译器认为这是一个java的类型,但是放在了kotlin代码中使用。
- 在接收一个java类对象的时候,如果不确定他是否可能为空,你一定要将它赋值为一个可空类型。
3、Kotlin没有静态变量与静态方法
kotlin的匿名内部类是被编译成class的时候会被创建INSTANCE静态对象,java调用要INSTANCE点来调用。
object Test{
fun sayMessage(msg:String){
println(msg)
}
}
//java code
Test.INSTANCE.sayMessage("hello");
//kotlin code
Test.sayMessage("hello")
- kotlin可以直接创建静态方法给java调用吗?可以,但要在方法上加@JvmStatic注解。
object Test{
@JvmStatic
fun sayMessage(msg:String){
println(msg)
}
}
//java code
Test.sayMessage("hello");
//kotlin code
Test.sayMessage("hello")
网友评论