2017-01-12 183 views
1

是什麼樣子,現在枚舉變量分配值:科特林 - 沒有.value的

class Trial { 
    companion object{ 
     @JvmStatic fun main(args: Array<String>){ 
      val message = Message.ALREADY_REGISTERED.value 
      println(message); 
     } 
    } 
} 

enum class Message constructor(val value: String){ 
    ALREADY_REGISTERED("You've already been registered") 
} 

此輸出:You've already been registered。但我想知道,有沒有辦法只分配val message = Message.ALREADY_REGISTERED並立即擁有價值,而不必使用.value

當試圖這樣(的代碼我想)

class Trial { 
    companion object{ 
     @JvmStatic fun main(args: Array<String>){ 
      val message = Message.ALREADY_REGISTERED 
      println(message); 
     } 
    } 
} 

enum class Message constructor(val value: String){ 
    ALREADY_REGISTERED("You've already been registered") 
} 

它輸出ALREADY_REGISTERED

因此,我可以使枚舉返回默認值而不是它的名稱?

+0

這個問題看起來像你要求隱式類型轉換'消息 - >字符串',而你可能不是。 – voddan

+0

那麼這將是一種解決方法,但很可能可以工作 – Ivaro18

+0

'構造函數'是多餘的 – elect

回答

1

你需要重寫toString()enum class

enum class Message(val value: String) { 
    ALREADY_REGISTERED("You've already been registered"); 

    override fun toString() = value 
} 

您也可以使用class delegation如果你想能夠把你的枚舉類爲CharSequence(如StringBuilderString狀類):

enum class Message(val value: String) : CharSequence by value { 
    ALREADY_REGISTERED("You've already been registered"); 

    override fun toString() = value 
} 

然後你可以使用它就像任何其他CharSequence。例如:

buildString { 
    append("Message received: ") 
    appendln(Message.ALREADY_REGISTERED) 
    appendln() 
    appendln("Don't forget to do your laundry.") 
} 
+0

謝謝,只是想知道:爲什麼需要分號?因爲編譯器會認爲我試圖聲明另一個枚舉? – Ivaro18

+0

有關詳細信息,請參閱[匿名類 - Enum類 - Kotlin編程語言](https://kotlinlang.org/docs/reference/enum-classes.html#anonymous-classes)。另請參閱[枚舉類的語法](https://kotlinlang.org/docs/reference/grammar.html#enum-classes)。 – mfulton26

+0

這隻在使用println時才起作用,如果消息更改爲'val message:String = Message.ALREADY_REGISTERED'同樣的問題仍然存在 – Ivaro18