由于谷歌宣布了Kotlin将成为Android开发语言,所以作为Android开发的就有必要学习下Kotlin了。在看过些资料之后发现Kotlin确实不错,由于有许多语法糖所以写出来的代码确实要比Java简洁很多。但至于Kotlin是否取代Java这一话题,对于我(刚刚踏入编程这一条路的程序员)来说没有取不取代的说法,关键是在于编程的思路,至于用什么语言关键是看是否有哪些优势。况且Kotlin能很好的跟Java兼容,所以在你编Java编的很枯燥,无聊的时候,换一种语言也无妨。接下来我就说说我在添加Kotlin过程遇到的一些坑吧:


Kotlin的配置

其实网上已经有很多资料教你怎么配置,但我还是再说下怎么配置吧。

首先下载Kotlin插件

kotlin需要引入spring吗 kotlin不好用_Kotlin

再在项目的Build.gradle中添加Kotlin插件依赖:

kotlin需要引入spring吗 kotlin不好用_android开发_02

最后在app的Build.gradle中添加Kotlin的依赖:

kotlin需要引入spring吗 kotlin不好用_Java_03

坑:兼容Dagger和ButterKnife

由于项目已经写了很多了,添加Kotlin需要兼容之前的Java代码。所以需要把之前使用的库也一起兼容起来。在引入依赖的时候需要通过 kapt 来导入 Dagger和ButterKnife:
先添加 kapt插件
apply plugin: ‘kotlin-kapt’
再更换Dagger和ButterKnife的依赖
Dagger
annotationProcessor ‘com.google.dagger:dagger-compiler:2.2’
换成
compile ‘com.google.dagger:dagger:2.4’
kapt ‘com.google.dagger:dagger-compiler:2.4’
provided ‘org.glassfish:javax.annotation:10.0-b28’
ButterKnife
compile ‘com.jakewharton:butterknife:8.6.0’
annotationProcessor ‘com.jakewharton:butterknife-compiler:8.6.0’
换成
compile ‘com.jakewharton:butterknife:8.6.0’
kapt ‘com.jakewharton:butterknife-compiler:8.6.0’

而且在代码转换的过程中,也需要进行些修改。
例如:
用注释@Inject的变量需要用lateinit进行修饰
@BindView也是如此。

再接下来是语法上的坑了。
Kotlin中最特殊于Java的就是有一种空安全的变量。也就是带有?的变量声明
var view : View? = null
空安全的意思也很简单,就是以后再也不需要写判断去保证不出现空指针的报错了!
当你调用了

view?.setVisibility();

就好比调用了

if (view != null){
    view.setVisibility();
}

多么的方便!!!!!然而在某些地方这些空安全也需要处理下才能使用,譬如if的条件语句中,你需要加!!才能使编译通过
if(view!!.isEnable())

时间有限来不及写,之后还会继续添加