本文主要是记录近期尝试用Kotlin开发过程中遇到的一些问题,其中有一部也不是问题,就是语言理解不够从而导致的问题。
Kotlin使用databinding
- 开启databinding
dataBinding {
enabled = true
}
复制代码
-
在app层级下的build.gradle中添加如下代码
apply plugin: 'kotlin-kapt'//kapt 插件 复制代码
-
在dependencies下添加最新版本的databinding:compiler
kapt "com.android.databinding:compiler:3.1.4"//这里的版本对应gradle的版本 复制代码
最新版本的AS其实已经不需要再添加上面的代码,AS最自动匹配上最新的版本
其实kotlin和databinding有部分功能是重合,在页面中引入xml的布局之后,可以直接使用xml中定义的变量名引用到控件
显示指定变量类型
一般情况下kotlin是不需要指定变量类型,可以根据上下文自动推断出变量的类型,但是也有存在需要显示指定变量类型的情况
举个栗子:
val runnable = object : Runnable {
override fun run() {
handler.sendMessage(Message.obtain())
}
}
val handler = @SuppressLint("HandlerLeak")
object : Handler() {
override fun handleMessage(msg: Message?) {
runnable.run()//这里报错
}
}
复制代码
上面这种情况会在使用的时候报一个错:
type checking has run into a recrusive problem. Easiest workaround: specify types of your declarations explicitly
复制代码
这是因为,虽然在你定义这个变量时可以根据后面的初始化代码来推断出这是一个Runnable类型的变量,但是在你引用到这个runnable时并不能推断出变量的类型。
解决报错也很简单,只要显示的指定变量的类型即可。
Kotlin匿名对象
-
匿名内部类实现的基本语法是,object : 类名或者接口名
-
匿名实现方法和接口,语法上只有一个区别,实现接口时不需要在口名后面加上(),而实现类时需要在后面类名后面加上()以示区分
Kotlin的静态方法和对象
Kotlin中没有静态方法的说法,但是有2种方式可以实现静态方法
-
Kotlin中定义方法可以直接在kt文件中申明,这个方法在Java中相当于是静态方法,区别在于这里定义的方法不需要通过类名就可以直接调用
-
Kotlin中类可以有伴生对象,在伴生对象中定义的变量和方法,其实就相当于是Java中的静态变量和静态方法,如果一个变量在定义时就用了const修饰,其实就是Java中的final对象。