新闻资讯
Kotlin中类似Java的static静态方法是什么?
Kotlin中没有static关键字,也就是没有直接定义静态函数/静态方法的static关键字。那么用Kotlin表示类似JAVA的static静态方法的方式是?
最佳回答
将函数放在”companion object”中。
所以像这样的java代码:
class Foo { public static int a() { return 1; }
}
会变成
class Foo { companion object { fun a() : Int = 1 }
}
然后,您可以从Kotlin代码内部使用它,如下所示:
Foo.a();
但是从Java代码中,您需要将其写作
Foo.Companion.a();
(注:上面这个写法在Kotlin中也有效。)
如果您不想指定Companion位,则可以添加@JvmStatic批注或命名您的Companion类。
根据docs:
Companion Objects
An object declaration inside a class can be marked with the companion keyword:
class MyClass { companion object Factory { fun create(): MyClass = MyClass() } }
Members of the companion object can be called by using simply the class name as the qualifier:
val instance = MyClass.create()
…
However, on the JVM you can have members of companion objects generated as real static methods and fields, if you use the @JvmStatic annotation. See the Java interoperability section for more details.
添加@JvmStatic批注看起来像这样
class Foo { companion object { @JvmStatic fun a() : Int = 1;
}
}
然后它将作为一个真正的Java静态函数存在,可以从Java和Kotlin中以Foo.a()的形式进行访问。
如果只是不喜欢Companion名称,则还可以为伴随对象提供一个明确的名称,如下所示:
class Foo { companion object Blah { fun a() : Int = 1;
}
}
它可以让您以相同的方式从Kotlin调用它。在JAVA中可以用Foo.Blah.a()在Java中调用它(这个调用方法在Kotlin中也可以使用)。
第二种回答
A.旧的Java方式:
-
声明companion object以包含静态方法/变量
class Foo{ companion object { fun foo() = println("Foo") val bar ="bar" } }
-
调用 :
Foo.foo() // Outputs Foo println(Foo.bar) // Outputs bar
B.新的Kotlin(科特林)方式
-
直接在文件上声明,而无需在.kt文件上声明类。
fun foo() = println("Foo") val bar ="bar"
-
使用methods/variables及其名称。 (导入后)采用 :
foo() // Outputs Foo println(bar) // Outputs bar
回复列表