alwaystest / Blog

24 stars 2 forks source link

Kotlin中的静态方法 #52

Open alwaystest opened 7 years ago

alwaystest commented 7 years ago

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

举个例子

package android.text

class TextUtils {
    companion object {
        @JvmStatic fun isEmpty(text: CharSequence?): Boolean {
            if (text == null || text == "")
                return true
            return false
        }
    }
}