Kolin学习笔记十-kotlin与java互操作

Kolin学习笔记十

  • kotlin与java
    • 可空性
    • 互操作性
    • @JvmName
    • @JvmFiled
    • @jvmoverloads
    • @jvmstatic
    • 异常捕捉
    • 函数类型操作

kotlin与java

可空性

kotlin调用java代码,因为kotlin存在可空性,所以当java方法返回空,当kotlin调用时,可能会报错。这里有一个平台类型,例如 String!,代表可能为空,可能不为空
重点:kotlin调用java ,一般加上?空安全操作符使用,或者使用notnull注解

互操作性

kotlin调用java 可以直接属性访问,a.name=
其实还是调用了get 和set方法。

kotlin顶层函数在java里都被当做静态方法看待和调用

@JvmName

指定编译类的名字。如果我们的方法没有写在类里,java需要调用,就使用@jvmName来指定名字
在koltin文件里 @file:jvmName(“xxx”)

那么在java里调用kotlin文件的方法,就能用xxx代替文件名

@JvmFiled

使得java访问kotlin类的属性,不用getxxx()这样调用,而是对象名.xxx=这样调用,也可以让java直接访问伴生对象里的属性。但是kotlin调用java,访问对象属性,可以直接按kotlin的方式来,上面有提到。

@jvmoverloads

因为kotlin的类方法存在默认值的情况,在kotlin中,可以只传全部参数中的几个,但给java调用时,得在kotlin函数上方加上 @ jvmoverloads,强制重载,这样java调用kotlin时,也能和kotlin一样,只用传其中的几个参数。

这个十分重要,因为写一个API,我们不应该只考虑kotlin开发者,还需要考虑java用户调用这个api是否方便。

@jvmstatic

作用和@jvmfiled类似,允许java直接调用伴生对象里的方法。

异常捕捉

@throw(xxxException::class)
kotlin方法抛出的异常,java调用时,是按throwable处理的,如果我们要指定java捕捉某种异常类型,就在kotlin方法上面,使用@throws注解,这样java调用时,就能捕捉特地的异常了,而不是throwable

函数类型操作

kotlin中的函数类型,其实就是类似于
val funTest:(String)->String={it->

}
这样的,匿名函数作为变量。
当java调用kotlin的函数类型时,使用FunctionN这样的名字的接口表示,N表示参数数目(N 0-23)。

//kotlin
class A{
  val  funTest:(String)->String={it->
}
}
//java
A a=new A()
Function1 translator= a.funTest()
translator.invoke("ssss")

你可能感兴趣的:(学习笔记,java,学习,kotlin)