1. Java调用kotlin中的默认参数方法
kotlin调用自身的中方法,默认参数是可以不传递的,相当于方法的重载,如何让Java调用kotlin中默认参数方法,可以使用@JvmOverloads
@JvmOverloads
fun test(name : String = "kd") {
}
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)
class Person{
private var _age =0
var age:Int
get() = _age
set(value) {
_age = value
}
}
3.also关键字
while (bufferReader.readLine().also({ line = it }) != null) {
}
while ((line = bufferReader.readLine()) != null) {
}
4.takeIf关键字
if (someObject != null && status) {
doThis()
}
someObject?.takeIf{ status }?.apply{ doThis() }
5.kotlin单例模式
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;
}
}
class Singleton private constructor() {
companion object {
val instance: Singleton by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
Singleton()
}
}
}
|