在Kotlin中没有静态关键字。

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


当前回答

除了迈克尔安德森的回答,我在我的项目中有其他两种编码方式。

第一:

你可以把所有变量白到一个类。 创建一个名为Const的kotlin文件

object Const {
    const val FIRST_NAME_1 = "just"
    const val LAST_NAME_1 = "YuMu"
}

您可以在kotlin和java代码中使用它

 Log.d("stackoverflow", Const.FIRST_NAME_1)

第二:

您可以使用Kotlin的扩展函数 创建了一个名为Ext的kotlin文件,下面的代码是Ext文件中的所有代码

package pro.just.yumu

/**
 * Created by lpf on 2020-03-18.
 */

const val FIRST_NAME = "just"
const val LAST_NAME = "YuMu"

你可以在kotlin代码中使用它

 Log.d("stackoverflow", FIRST_NAME)

您可以在java代码中使用它

 Log.d("stackoverflow", ExtKt.FIRST_NAME);

其他回答

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

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

    fun staticMethod() {
    }
  }

您可以使用Companion Objects - kotlinlang

它可以通过首先创建该接口来显示

interface I<T> {

}

然后我们必须在该接口内部创建一个函数:

fun SomeFunc(): T

然后,我们需要一节课:

class SomeClass {}

在该类中,我们需要一个伴生对象:

companion object : I<SomeClass> {}

在那个同伴对象中,我们需要旧的SomeFunc函数,但是我们需要重写它:

override fun SomeFunc(): SomeClass = SomeClass()

最后,在所有这些工作下面,我们需要一些东西来支持静态函数,我们需要一个变量:

var e:I<SomeClass> = SomeClass()

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

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

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

有两种方法可以在Kotlin中应用静态

首先在类下创建一个伴生对象

为例:

class Test{
    companion object{
          fun isCheck(a:Int):Boolean{
             if(a==0) true else false
          }
     }
}

你可以称这个函数为

Test.Companion.isCheck(2)

另一种方法是创建一个对象类

object Test{
       fun isCheck(a:Int):Boolean{
            if(a==0) true else false
       }
}

编码快乐!

让,你有一个班级学生。你有一个静态方法getUniversityName()和一个静态字段totalStudent。

你应该在你的类中声明同伴对象块。

companion object {
 // define static method & field here.
}

然后你的类看起来像

    class Student(var name: String, var city: String, var rollNumber: Double = 0.0) {

    // use companion object structure
    companion object {

        // below method will work as static method
        fun getUniversityName(): String = "MBSTU"

        // below field will work as static field
        var totalStudent = 30
    }
}

然后你可以像这样使用那些静态方法和字段。

println("University : " + Student.getUniversityName() + ", Total Student: " + Student.totalStudent)
    // Output:
    // University : MBSTU, Total Student: 30