scala枚举中的非静态方法

时间:2015-08-21 17:48:21

标签: java scala enums

在Java Enum中,可以添加一个基于该枚举实例工作的非静态方法。

因此,给定以下枚举,此代码TestEnum.FOO.getName();将打印“foo”

public static enum TestEnum {
    FOO("foo"),
    BAR("bar");
    private final String name;

    private TestEnum(String name) {
        this.name = name;
    }

    public String getName() {
        return this.name;
    }
}

在scala中执行此操作的最简单方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以在特征中定义抽象成员,然后在具体情况下实现它们:

sealed trait TestEnum { val name: String }
case object Foo extends TestEnum { val name = "foo" }
case object Bar extends TestEnum { val name = "foo" }
在REPL中进行演示:

scala> val (foo,bar): (TestEnum,TestEnum) = (Foo,Bar)
foo: TestEnum = Foo
bar: TestEnum = Bar
scala> foo.name
res1: String = "foo"
scala> bar.name
res2: String = "bar"

修改:您可以在访问TestEnum的{​​{1}}中定义getName,如下所示:

name

或者您也可以忘记sealed trait TestEnum { val name: String; def getName = name } case object Foo extends TestEnum { val name = "foo" } case object Bar extends TestEnum { val name = "bar" } 并使用:

val