我是Scala的新手,现在我正在创建我的第一个枚举(使用case类覆盖toString
)。
package views.helper.button
abstract sealed class Size(identifier: Option[String])
{
def this(identifier: String) = this( Some( identifier ) )
override def toString: String = identifier match
{
case Some( identifier ) => "btn-" + identifier
case _ => ""
}
case object Mini extends Size( "mini" )
case object Small extends Size( "small" )
case object Default extends Size( None )
case object Large extends Size( "normal" )
}
来自Java背景这是我的第一次尝试。访问像button.Size.Mini
这样的案例对象对我来说似乎很自然。但看起来我无法访问类的内部对象。将它们放在Size
类下面可以正常工作,但会导致名称空间混乱。
为什么?你会如何模仿这种行为?扩展Enumeration
的对象可以做得更优雅(我认为toString
会成为一个问题......)?
答案 0 :(得分:4)
如果要使用case类,则需要将case对象放在Size的伴随对象中(相当于静态可见性)
package views.helper.button
abstract sealed class Size(identifier: Option[String])
{
def this(identifier: String) = this( Some( identifier ) )
override def toString: String = identifier match
{
case Some( identifier ) => "btn-" + identifier
case _ => ""
}
}
object Size {
case object Mini extends Size( "mini" )
case object Small extends Size( "small" )
case object Default extends Size( None )
case object Large extends Size( "normal" )
}