如何在 Kotlin 中创建多个常量子集

4

在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”;
    }
}
}
3个回答

4

与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"
    }
}

3
您可以使用以下代码:
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)。


1
“这很容易,你可以定义如下:”
class A{
    class ResponseType {
        companion object { 
             val code = 100 // you can call: A.ResponseType.code in everywhere now
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接