2017-09-25 57 views
2

在具有定义一些常量的类的java中,有些属于内部类。如何使多个子集在kotlin中保持不变

它们可以被称为:

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

如何做相同的科特林?

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

回答

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

说明:

在科特林object关键字用于创建静态类(像JAVA)。

3

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

或者,如果你想将你的静态值加在一起如果你希望你的伴侣对象值暴露为静态你可以标注他们一些Java类,你可以创建非同伴对象

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) 
} 

@JvmStatic

class Constants { 

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

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

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