在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中执行此操作的最简单方法是什么?
答案 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