2017-01-12 185 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