2017-09-25 58 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 
     } 
    } 
}