在Kotlin中声明静态属性?

6g8kf2rb  于 2023-05-01  发布在  Kotlin
关注(0)|答案(3)|浏览(142)

我的Java代码:

public class Common {
    public static ModelPengguna currentModelPengguna;
}
q43xntqr

q43xntqr1#

public class Common {
    companion object {
        val currentModelPengguna: ModelPengguna = ModelPengguna()  
    }
}

或者如果对象是静态的,并且您希望它作为Singleton,则可以使用

object Common {
        val currentModelPengguna: ModelPengguna = ModelPengguna()
}

Kotlin中的静态属性由companion object进一步阅读引入:
https://kotlinlang.org/docs/reference/object-declarations.html#companion-objects

bvuwiixz

bvuwiixz2#

Java使用相同的static关键字用于许多功能,例如:

  • 全局变量/属性。
  • 常量,例如:private static final String TAG = ...
  • 类的加载初始化器-Java将其命名为Static-block。

而Kotlin则将它们分开。

示例

如果我们有一个Java文件,例如:

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) {
        // ...
    }
}

其中:

  • 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的内置功能)。

taor4pac

taor4pac3#

静态变量在伴随对象中声明和初始化,例如:

public class MyClass {

    companion object{
        const val TAG: String = "my-tag"
        const val myVariable: MyType = MyType()
        var myNullableVariable: MyType? = null
    }
}

相关问题