3

我是 Scala 的新手,现在我正在创建我的第一个枚举(使用要覆盖的案例类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 背景,这是我的第一次尝试。访问 case 对象button.Size.Mini对我来说似乎很自然。但看起来我无法访问该类的内部案例对象。将它们放在Size类下面可以正常工作,但会导致命名空间混乱。

这是为什么?您将如何建模这种行为?这可以通过扩展对象来更优雅地完成吗Enumeration(我认为toString这会成为一个问题..)?

4

1 回答 1

5

如果要使用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" )
}
于 2013-02-27T15:32:58.717 回答