Open alwaystest opened 7 years ago
标签(空格分隔): Android Kotlin
Kotlin取消了Java中的static关键字,转而使用companion object,然而这两个还不完全一样。
static
companion object
单元测试的时候由于有绕不过的TextUtils这个类,比较偷懒的话可以使用Robolectric来解决,但是Robolectric运行速度比较慢,而且也不是特别简单,所以在test文件夹下自己写一个android.text.TextUtils类还是有必要的。
TextUtils
android.text.TextUtils
本来直接用Java来写这个类就行,把SDK的源码复制一下就完事,但是前面立下了Flag,说单元测试使用Kotlin来编写,而Kotlin Plugin提供的一键转换居然不管用了,转过去的Kotlin类不能直接使用,还得先修改IDE报的错,然后再使用。
Kotlin使用companion object声明的方法可以在Kotlin类中直接通过类名调用,但是运行单元测试的时候会提示方法不存在。
查了半天,才发现Java类中调用这个方法还需要给方法添加@JvmStatic。
@JvmStatic
举个例子
package android.text class TextUtils { companion object { @JvmStatic fun isEmpty(text: CharSequence?): Boolean { if (text == null || text == "") return true return false } } }
Kotlin中的静态方法
标签(空格分隔): Android Kotlin
Kotlin取消了Java中的
static
关键字,转而使用companion object
,然而这两个还不完全一样。单元测试的时候由于有绕不过的
TextUtils
这个类,比较偷懒的话可以使用Robolectric来解决,但是Robolectric运行速度比较慢,而且也不是特别简单,所以在test文件夹下自己写一个android.text.TextUtils
类还是有必要的。本来直接用Java来写这个类就行,把SDK的源码复制一下就完事,但是前面立下了Flag,说单元测试使用Kotlin来编写,而Kotlin Plugin提供的一键转换居然不管用了,转过去的Kotlin类不能直接使用,还得先修改IDE报的错,然后再使用。
Kotlin使用
companion object
声明的方法可以在Kotlin类中直接通过类名调用,但是运行单元测试的时候会提示方法不存在。查了半天,才发现Java类中调用这个方法还需要给方法添加
@JvmStatic
。举个例子