在Kotlin中没有静态关键字。

在Kotlin中表示静态Java方法的最佳方法是什么?


当前回答

使用对象表示val/var/方法使静态。你也可以用object代替单例类。如果你想在类内部创建静态,你可以使用companion

object Abc{
     fun sum(a: Int, b: Int): Int = a + b
    }

如果你需要从Java调用它:

int z = Abc.INSTANCE.sum(x,y);

在Kotlin中,忽略INSTANCE。

其他回答

Docs建议使用包级函数来解决静态函数的大部分需求。它们只是在源代码文件中的类之外声明的。文件的包可以在文件的开头用关键字package指定。

宣言

package foo

fun bar() = {}

使用

import foo.bar

另外

import foo.*

你现在可以调用函数:

bar()

或者不使用import关键字:

foo.bar()

如果不指定包,则可以从根目录访问该函数。

如果您只有java经验,这可能看起来有点奇怪。原因是kotlin不是严格的面向对象语言。你可以说它支持类之外的方法。

编辑: 他们编辑了文档,不再包含关于推荐包级函数的句子。这是上面提到的原稿。

使用@JVMStatic Annotation

companion object {

    // TODO: Rename and change types and number of parameters
    @JvmStatic
    fun newInstance(param1: String, param2: String) =
            EditProfileFragment().apply {
                arguments = Bundle().apply {
                    putString(ARG_PARAM1, param1)
                    putString(ARG_PARAM2, param2)
                }
            }
}

简单来说,你可以使用“同伴对象”进入Kotlin静态世界,比如:

  companion object {
    const val TAG = "tHomeFragment"
    fun newInstance() = HomeFragment()
}

要创建一个常量字段,请使用代码中的“const val”。 但是尽量避免使用静态类,因为它会给使用Mockito进行单元测试带来困难。

对于Java:

public class Constants {
public static final long MAX_CLICK_INTERVAL = 1000;}

等价的Kotlin代码:

object  Constants {
const val MAX_CLICK_INTERVAL: Long = 1000}

因此,等价于Java静态方法的是Kotlin中的对象类。

所有静态成员和函数都应该在伴生块中

  companion object {
    @JvmStatic
    fun main(args: Array<String>) {
    }

    fun staticMethod() {
    }
  }