在Kotlin中没有静态关键字。
在Kotlin中表示静态Java方法的最佳方法是什么?
在Kotlin中没有静态关键字。
在Kotlin中表示静态Java方法的最佳方法是什么?
当前回答
对于Java:
public class Constants {
public static final long MAX_CLICK_INTERVAL = 1000;}
等价的Kotlin代码:
object Constants {
const val MAX_CLICK_INTERVAL: Long = 1000}
因此,等价于Java静态方法的是Kotlin中的对象类。
其他回答
对于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
您可以使用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()
将它们直接写入文件。
在Java中(丑陋):
package xxx;
class XxxUtils {
public static final Yyy xxx(Xxx xxx) { return xxx.xxx(); }
}
在芬兰湾的科特林:
@file:JvmName("XxxUtils")
package xxx
fun xxx(xxx: Xxx): Yyy = xxx.xxx()
这两段代码在编译后是相等的(甚至编译后的文件名file:JvmName用于控制编译后的文件名,该文件名应该放在包名声明之前)。
这对我也有用
object Bell {
@JvmStatic
fun ring() { }
}
从芬兰湾的科特林
Bell.ring()
从Java
Bell.ring()
Docs建议使用包级函数来解决静态函数的大部分需求。它们只是在源代码文件中的类之外声明的。文件的包可以在文件的开头用关键字package指定。
宣言
package foo
fun bar() = {}
使用
import foo.bar
另外
import foo.*
你现在可以调用函数:
bar()
或者不使用import关键字:
foo.bar()
如果不指定包,则可以从根目录访问该函数。
如果您只有java经验,这可能看起来有点奇怪。原因是kotlin不是严格的面向对象语言。你可以说它支持类之外的方法。
编辑: 他们编辑了文档,不再包含关于推荐包级函数的句子。这是上面提到的原稿。