美文网首页Android开发Android开发经验谈
Kotlin-第2节、新手使用kotlin常碰到的问题

Kotlin-第2节、新手使用kotlin常碰到的问题

作者: JuliusL | 来源:发表于2018-10-22 13:40 被阅读6次

目录:
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")

相关文章

网友评论

    本文标题:Kotlin-第2节、新手使用kotlin常碰到的问题

    本文链接:https://www.haomeiwen.com/subject/wdnpzftx.html