public class MyClass {
private static final String TAG = "my-tag";
@NonNull
public static MyType myVariable = new MyType();
@Nullable
public static MyType myNullableVariable = null;
static {
Log.d(TAG, "Got this far!");
}
public void onSomething() {
onSomething(false);
}
public void onSomething(optionalArg: Boolean) {
// ...
}
}
然后Kotlin版本可能看起来像这样:
open class MyClass {
companion object {
private const val TAG = "my-tag"
@JvmStatic
var myVariable: MyType = MyType()
@JvmStatic
var myNullableVariable: MyType? = null
init {
Log.d(TAG, "Got this far!")
}
}
@JvmOverloads
open fun onSomething(optionalArg: Boolean = false) {
// ...
}
}
public class MyClass {
companion object{
const val TAG: String = "my-tag"
const val myVariable: MyType = MyType()
var myNullableVariable: MyType? = null
}
}
3条答案
按热度按时间q43xntqr1#
或者如果对象是静态的,并且您希望它作为Singleton,则可以使用
Kotlin中的静态属性由
companion object
进一步阅读引入:https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects
bvuwiixz2#
Java使用相同的
static
关键字用于许多功能,例如:private static final String TAG = ...
而Kotlin则将它们分开。
示例
如果我们有一个Java文件,例如:
然后Kotlin版本可能看起来像这样:
其中:
open class
类似于Java的public class
。@JvmStatic
”部分允许Java使用Kotlin的myVariable
,就好像它是Java的static
成员一样。@JvmOverloads
”部分允许Java调用Kotlin的onSomething
,而无需传递所有参数。注意,“
: MyType
”部分可以省略,因为Kotlin和Android-studio IDE都会根据初始化器(例如:例如,基于“= MyType()
”部分)。此外,
@JvmStatic
和@JvmOverloads
不需要任何导入(因为它们是Kotlin的内置功能)。taor4pac3#
静态变量在伴随对象中声明和初始化,例如: