【问题标题】:how make multiple sub set constant in kotlin如何在kotlin中使多个子集保持不变
【发布时间】:2017-09-25 00:29:21
【问题描述】:

在 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”;
    }
}
}

【问题讨论】:

    标签: android kotlin constants


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您可以使用以下代码:

      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 中一样)。

      【讨论】:

        【解决方案3】:

        很简单,你可以定义如下:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-26
          • 1970-01-01
          • 2021-11-01
          • 2022-01-10
          • 2012-01-13
          • 2012-03-14
          • 2020-06-17
          • 1970-01-01
          相关资源
          最近更新 更多