如何使多个子集在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 } } }
- 用Kotlin 1.1.2-4编译时的循环依赖关系,而不是1.1.2-3
- 使用Anko获取类型不匹配错误需要AnkoContext <ViewGroup>找到AnkoContext <Context>
- 将RxJava代码正确转换为Kotlin
- 咖啡测试Kotlin
- Android studio 2.3:无法初始化类org.jetbrains.kotlin.android.actions.NewKotlinActivityAction
- 安装Kotlin Android项目失败INSTALL_FAILED_DEXOPT
- 如何在Android中使用VectorDrawable <selector>
- 从Java转换到Kotlin时出错。 错误 – org.gradle.api.tasks.TaskExecutionException:任务执行失败:app:compileDebugKotlin'
- Kotlin – 将List转换为MutableList的最常用的方法