1. Java调用kotlin中的默认参数方法
kotlin调用自身的中方法,默认参数是可以不传递的,相当于方法的重载,如何让Java调用kotlin中默认参数方法,可以使用@JvmOverloads
@JvmOverloads
fun test(name : String = "kd") {
}
//Java调用
Test.INSTANCE.test();
2.kotlin中Property
- 在 Kotlin 中,属性(property)不管有没有 get/set 都称之为 property,而在 Java 中 field + get、set方法一起才能是一个 property。
- 错误写法
var age = 0
set(value){
age = value + 1
}
原因 : 会发生递归,无法赋值
- 正确写法
var age = 0
set(value){
field = value + 1
}
一个 field可以访问和赋值,这个东西就是 Kotlin 的幕后字段(Backing Field)
- 没有backing field
class Person{
private var _age =0
var age:Int
get() = _age
set(value) {
_age = value
}
}
3.also关键字
- kotlin写法
while (bufferReader.readLine().also({ line = it }) != null) {
// do something
}
- Java写法
while ((line = bufferReader.readLine()) != null) {
// do something
}
4.takeIf关键字
// 原代码
if (someObject != null && status) {
doThis()
}
// 最佳实践
someObject?.takeIf{ status }?.apply{ doThis() }
5.kotlin单例模式
//Java实现
public class Singleton {
private volatile static Singleton instance;
private Singleton(){}
public static Singleton getInstance(){
if(instance==null){
synchronized (Singleton.class){
if(instance==null){
instance=new Singleton();
}
}
}
return instance;
}
}
//kotlin实现
class Singleton private constructor() {
companion object {
val instance: Singleton by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
Singleton()
}
}
}
版权声明:本文为qq_44203816原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。