kotlin 中的::表示的是引用一个另外一个函数的方法,如果有需要参数的话当然也是需要提供的了
var list = listof(1,2,3)
list.forEach(::println) 这里之所以不能省略,是因为要和this做区分.
kotlin
var:可读,可写。
val: 不是不可变的,而是表示read only,只读状态,这样的话就起到了final的功效,但是并不能表示不可变化。
const 才是表示不可变的,与final对应。并且该修饰符需要放置到顶层.
java和kotlin互相调用。
- JvmField: 当java想要调用kotlin中的变量的时候,需要用@JvmField变量进行修饰。
- JvmStatic: 加上该注解之后 就不需要用类名.companion.getA()这种调用链冗余的方式去
访问类,可以使用Person.getA();的方式去访问变量a.
- JvmStatic: 加上该注解之后 就不需要用类名.companion.getA()这种调用链冗余的方式去
companion object {
@JvmStatic
var a = 1
}
另外的话也用于修饰kotlin中的静态方法,这样的话java能够通过类名直接进行访问.
- @JvmOverloads
其实开发中,我们为了实现某些默认值的效果,采用的是java重载的方式,但是这种方法会让java代码看起来十分冗余,kotlint方法中可以有默认的参数,我们可以采用这种方式去轻松的实现重载,如果不加入该注解,我们看到的效果是这样的。
- @JvmOverloads
fun test(a:Int,b:Int = 2)fun test(a:Int,b:Int = 2) {
加入该注解之后,我们看到的效果是这样的。
起到了重载的效果
一个小小的注解,能够帮我们清除那么多冗余的代码,想想都有点小激动啊.
ps:平时要是要多存图啊,你看写到这,想发图,突然发现没有存货🤯.
- @JvmName 可以指定kotlin编译之后的文件的名字
-5. NoArg生成无参数的构造方法,弥补data 关键字的不足(data没有默认的额无参构造)
AllOpen 去除默认的final修饰符.
kotlin 装箱拆箱问题
kotlin和java 的装箱拆箱问题,遇到的时候就尽量规避掉,kotlin基本类型都会映射到java的类型,实现想用的话就用一个默认类去实现它.
注解处理器 :Dagger2
kotlin和java 的装箱拆箱问题,遇到的时候就尽量规避掉,kotlin基本类型都会映射到java的类型,实现想用的话就用一个默认类去实现它.
关于注解处理器。比如dagger,但是rebuild project
没有效果。
kapt
1 要用插件 kotlin-kapt
apply plugin:"kotlin-kapt"
2 rebuild 不能用,idea还没支持,所以要采用build的方式.
3 这步完成之后,你会发现还是build文件目录已经有产物了,但是我们还是无法引用,怎么办呢?
sourcesets{
main.kotlin.srcDirs+ = "build/generated/source/kapt/main"
}
完成上述步骤的操作之后就能够成功的引入我们的dagger了,关于dagger,对于做架构很有帮助,顺便提一句,而且会与使用类的生命周期进行绑定,我们也不用关心生命周期绑定,对象销毁的问题。
屏幕快照 2018-12-09 下午12.16.10.png
网友评论