这篇文章主要介绍了Java与芬兰湾的科特林之间怎样进行互操作,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
<强>前言强>
目前芬兰湾的科特林是谷歌首推的开发安卓的语言,但由于历史原因,我们绝大部分项目依旧还是以Java为主的,也就是说存在Java和芬兰湾的科特林两种语言同时开发的情况。
有人会说把老项目全部翻译成芬兰湾的科特林,的确可以怎么做,但是成本还是挺大的。我们只能一点一点慢慢的向芬兰湾的科特林语言迁移。
那么在迁移的过程中就避免不了Java和芬兰湾的科特林相互调用的情况。即芬兰湾的科特林调用Java或Java调者用芬兰湾的科特林。下面我们就来具体看下两者之间相互操作的一些解决方案。
<强>芬兰湾的科特林调用Java
强>
<强>可空性(Nullability) 强>
Java默认有数值可空性而芬兰湾的科特林没有,所以在调用Java的方法的时候不知道会不会收到空值。
所以我们在芬兰湾的科特林中调用Java的时候需要添加?或者!来告诉芬兰湾的科特林有可能出现空值。
比如这里有一个Java方法,接受一组字符串后返回一组做字符串:
public Set,释放(Collection 那么芬兰湾的科特林在调用的时候是不能确定输入和输出是否可为空的,就需要使用?或者!来辅助判断。
为了方便芬兰湾的科特林调用,我们通常使用@NotNull注解来标识Java代码的非原始参数,字段,返回值。
@NotNull Set<@NotNull  String>,释放(@NotNull Collection< @NotNull String>,元素){//TODO }这个芬兰湾的科特林在调用的时候就明确知道不能为空,这里我们使用的是jetBrain的@NotNull注解,当然还有其他选择,如下图:
这里还是推荐使用jetBrain或者Android的注解。
<强>前缀属性:(getter、setter) 强>
如果是使用Java bean,那么我们在芬兰湾的科特林中调用就没有什么问题。
如果你的空参数方法是以得到开头的,那么芬兰湾的科特林就知道这是吸气剂,就可以通过属性名来访问它。
相同的如果是由集开头的单一参数方法,那么芬兰湾的科特林就知道这是setter,就通过属性名直接赋值。
当然是的工作原理也是和它们类似的。
我们定义一个Java bean:
class User { , ,private String 名称; ,private int 年龄; ,public String  getName (), { return 才能,名字; ,} ,public void  setName (String 名称),{ this.name 才能=,名称; ,} ,public int  getAge (), { return 才能;年龄; ,} ,public void  setAge (int 年龄),{ 时间=this.age 才能;年龄; ,} }芬兰湾的科特林中访问
val user =,用户() 时间=user.name “四爷“,//赋值 val age =, user.age //获取年龄字段值<强>关键字(关键词)强>
芬兰湾的科特林中有很多系统定义的关键字如乐趣是在对象,类,val, var,当typealias等。
这些关键字在java是可以被使用的,但是在芬兰湾的科特林却是不行的。
函数或者参数使用了这些关键字,那么芬兰湾的科特林在调用的时候会出现一些问题,比如java中定义了一个方法名是叫的方法。那么在芬兰湾的科特林中直接调用就会报错。
那么最简单的方法就是重命名java方法,但如果调用的是三方库的方法,就很难去重命名了。
所以我们另一种解决方式是在芬兰湾的科特林调用java方法的时候加上“反引号来使用。Utils.“是”()但是我们如果能重命名还是重命名,以防止代码出现太多的符号。
避免在任何扩展方法和扩展属性上使用任何
<强>运算符重载(操作符重载)强>
在java不存在运算符重载,而芬兰湾的科特林有比。如:
+ b =祝辞,a.plus (b)Java与芬兰湾的科特林之间怎样进行互操作