IT技术

如何在 Java 和 Kotlin 之间进行互操作

2019-11-26  本文已影响0人  屈子腾

原创: Android 谷歌开发者

Kotlin 超好用,您也许想用 Kotlin 写所有的东西,但那些现有的 Java 语言代码该怎么办呢?或者您需要用到一个利用 Java 语言编写并已经在很多 Kotlin 或者 Java 项目里被采用的库或者项目。

  1. 可空性
    Java 默认又有数值可空性,而Kotlin没有。所以,如果使用Kotlin来调用Java功能。Kotlin不会知道这个功能能不能返回或受到空值,因此需要添加问号或者感叹号来告诉Kotlin有可能出现空值。不过可以通过注解标识。
    java实现
@NotNull
Set<@NotNull String> toSet(@NotNull Collection<@NotNull String> elements){...}

kotlin 实现

fun toSet(elements: (Mutable)Collection<String>) : (Mutable)Set<String>{...}
  1. Getters/Setters
    如果java空参方法是以get开头的,Kotlin就知道是get方法,通过属性访问它。如果是由set开头的单一参数方法,kotlin会知道是set方法,给属性直接赋值。

  2. 关键字
    Java和kotlin的关键字不同,因此在kotlin调用时,就可能出现一些问题。不过Kotlin可以通过增加''可以解决,但是''不是很友好,尽可能进行重命名
    例:is是kotlin的关键字,在java中不是,可以作为一个方法名

java代码
public boolean is(SomeObject input ){...}
kotlin 的调用
something.'is'(input)
  1. Any
    试着避免在任何扩展方法和扩展属性上使用Any。

  2. 运算符重载
    java 不存在运算符重载,但是kotlin存在

a+b    a.plus(b)
a-b    a.minus(b)
a*b    a.times(b)
a/b    a.div(b)
a..b   a.rangeTo(b)
+a     a.unaryPlus()
-a     a.unaryMinus()
!a     a.not()
a++    a.inc()
a--    a.dec()
上一篇下一篇

猜你喜欢

热点阅读