在Kotlin中没有静态关键字。

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


当前回答

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

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

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

其他回答

A.旧Java方式:

声明一个伴随对象来包含一个静态方法/变量 类Foo { 伴随对象{ fun foo() = println(" foo ") Val bar ="bar" } } 使用: Foo. Foo() //输出Foo println(Foo.bar) //输出bar



B.新的Kotlin方式

直接在文件上声明,而不需要在.kt文件上使用类。 fun foo() = println(" foo ") Val bar ="bar" 使用方法/变量的名称。(导入后) 使用: foo() //输出foo println(bar) //输出bar


如果你需要一个函数或属性绑定到一个类,而不是它的实例,你可以在一个伴随对象中声明它:

class Car(val horsepowers: Int) {
    companion object Factory {
        val cars = mutableListOf<Car>()

        fun makeCar(horsepowers: Int): Car {
            val car = Car(horsepowers)
            cars.add(car)
            return car
        }
    }
}

伴生对象是一个单例对象,它的成员可以通过包含类的名称直接访问

val car = Car.makeCar(150)
println(Car.Factory.cars.size)

您可以使用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()

对于Android使用从单个活动到所有必要活动的字符串。 就像java中的静态

public final static String TEA_NAME = "TEA_NAME";

Kotlin中的等效方法:

class MainActivity : AppCompatActivity() {
    companion object {
        const val TEA_NAME = "TEA_NAME"
    }
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
}

另一个需要价值的活动是:

val teaName = MainActivity.TEA_NAME

Kotlin没有任何静态关键字。您可以在Java和Kotlin中使用下面的代码

 object AppHelper {
    @JvmStatic
    fun getAge() : Int = 30
}

Java类调用

AppHelper.getAge();

呼叫Kotlin类

AppHelper.getAge()

它非常适合我。谢谢