如何使多个子集在kotlin中不变

在有一个定义了一些常量的类的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”; } } } 

你可以使用下面的代码:

 object Data { val HTTP_SCHEME = "http" val HTTPS_SCHEME = "https" class Constants { 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”; } } } 

说明:

在Kotlin中object关键字是用来创建静态类的(比如在java中)。

不像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" } } 

这很容易,你可以定义如下:

 class A{ class ResponseType { companion object { val code = 100 // you can call: A.ResponseType.code in everywhere now } } }