kotlin如何写类似java的静态方法
kotlin如果想实现类似java的静态方法有两种:
第一种方法:是直接创建一个kotlin文件,然后直接创建一个方法,代码如下

然后在主函数直接调用
fun main(array: Array<String>) {
//直接调用上述fang
staticMethod()
}
第二种方式:通过伴生对象,伴生对象一个类只能写一个,代码如下
class StaticClass private constructor(val value: Double) {
// companion object {}就是这个类的伴生对象
companion object {
//TAG就相当于java的静态属性
val TAG="StaticClass"
//类似java的静态对象,有返回值
fun ofDouble(double: Double): StaticClass {
return StaticClass(double)
}
//类似java的静态对象,无返回值
fun getStaticMethod() {
println("调用了StaticClass里的getStaticMethod方法")
}
}
}
//具体调用
fun main(array: Array<String>) {
var staticClass = StaticClass.ofDouble(2.0)
StaticClass.getStaticMethod()
println(StaticClass.TAG)
}
但是上述方法在和java混合开发中,在java中调用上面静态方法就会有一个问题,如下
public static void main(String[] args){
//调用这个静态方法得通过Companion调用,写法感觉有点累赘
StaticClass.Companion.getStaticMethod();
StaticClass.Companion.ofDouble(2.0);
}
当然也有办法解决,就是在静态方法和静态属性上面增加 @JvmStatic关键字
class StaticClass private constructor(val value: Double) {
companion object {
@JvmField
val TAG="StaticClass"
@JvmStatic
fun ofDouble(double: Double): StaticClass {
return StaticClass(double)
}
@JvmStatic
fun getStaticMethod() {
println("调用了StaticClass里的getStaticMethod方法")
}
}
}
还有人说通过object关键字也可以实现类似静态方法,其实不是,object其实是声明创建类似java的单例模式
//object其实是声明创建该类为单例
object ObjectClass {
fun getObject() {
println("调用了getObject")
}
}
//主函数调用
fun main(array: Array<String>) {
var staticClass = StaticClass.ofDouble(2.0)
ObjectClass.getObject()
}
浙公网安备 33010602011771号