android - 如何在 Kotlin 中使多个子集保持不变

标签 android kotlin constants

在有一个定义了一些常量的类的java中,一些在内部类中。

他们可以被称为:

Data.HTTP_SCHEME;
Data.Constants.ResponseType.XML;
Data.PayloadType.JSON

如何在 Kotlin 中做同样的事情?

public class Data {
public static final String HTTP_SCHEME = "http";
public static final String HTTPS_SCHEME = "https";

public static class Constants {

    public static class ResponseType {
        public static final String XML = "xml";
        public static final String JSON = "json";
    }        
    public static class PayloadType {
        public static final String JSON = "json";
    }

    public static class ItemDataType {
        public static final String ID = "id";
        public static final String IS_GLOBAL = "isGlobal";
        public static final String IS_TRANSLATED = "isTranslated”;
    }
}
}

最佳答案

与 Java 不同,Kotlin 没有静态变量。相反,他们有伴生对象。 每个类都带有一个伴随对象,您可以使用它来存储静态值。

class Constants {

    companion object {
        val HTTP_SCHEME = "http"
        val HTTPS_SCHEME = "https"
    }
}

fun main(args: Array<String>) {
    println(Constants.HTTP_SCHEME)
    println(Constants.HTTPS_SCHEME)
}

或者如果你想将你的静态值组合在一起,你可以创建非伴随对象

class Constants {

    companion object {
        var HTTP_SCHEME = "http"
        var HTTPS_SCHEME = "https"
    }

    object ResponseType {
        val XML = "xml"
        val JSON = "json"
    }
    object PayloadType {
        val JSON = "json"
    }

    object ItemDataType {
        val ID = "id"
        val IS_GLOBAL = "isGlobal"
        val IS_TRANSLATED = "isTranslated"
    }

}

fun main(args: Array<String>) {
    println(Constants.ItemDataType.IS_TRANSLATED)
    println(Constants.PayloadType.JSON)
}

如果您希望您的伴生对象值作为静态值公开给某些 Java 类,您可以使用 @JvmStatic 注释它们

class Constants {

    companion object {
        @JvmStatic var HTTP_SCHEME = "http"
        @JvmStatic var HTTPS_SCHEME = "https"
    }
}

关于android - 如何在 Kotlin 中使多个子集保持不变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46396104/

相关文章:

android - Kotlin Android 扩展访问 TextView

android - 如何在Android中将 double 转换为货币格式

java - 在枚举中声明常量

arrays - Delphi - 指向 TRecord 的常量数组?

c++ - 这是 "mutable"在 C++ 中的一个很好的用例吗?

java - 在类之间传递值以及更新回收器 View 时如何修复 "System services not available to Activities before onCreate"?

java - 使用适用于 Android 的 Quizlet API

android - 在 ConstraintLayout 中,确定我的 View 连接到的 View (例如,通过 ConstraintSet.TOP)

php - 如何将 Android 应用程序连接到 mySQL *具体*

java - Kotlin Spring security + JWT - 注册端点上的 401