Java scala枚举中的非静态方法

Java scala枚举中的非静态方法,java,scala,enums,Java,Scala,Enums,在Java枚举中,可以添加基于该枚举实例的非静态方法 因此,给定以下枚举,该代码TestEnum.FOO.getName()将打印“foo” 在scala中,最简单的方法是什么?您可以在trait中定义抽象成员,然后在具体案例中实现它们: sealed trait TestEnum { val name: String } case object Foo extends TestEnum { val name = "foo" } case object Bar extends TestEnum

在Java枚举中,可以添加基于该枚举实例的非静态方法

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


在scala中,最简单的方法是什么?

您可以在trait中定义抽象成员,然后在具体案例中实现它们:

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
中定义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
而使用:

sealed trait TestEnum { def getName }
case object Foo extends TestEnum { def getName = "foo" }
case object Bar extends TestEnum { def getName = "bar" }

这很好,但是我正在使用的库希望我使用一个枚举来实现包含
getName()
方法的接口。您可以将
val
getName
命名,或者在trait中将
getName
定义为wellBetter,让你的库扩展你的库所期望的这个接口。在你对Markus回答的评论中,你提到一个库需要一个枚举。你是说像
?然后我想,你不能在scala中创建任何适合它的东西,我不这么认为。我现在尝试了很多不同的方法。我现在制作了一个更通用的Java枚举。我只是希望在这里找到解决办法。
sealed trait TestEnum { def getName }
case object Foo extends TestEnum { def getName = "foo" }
case object Bar extends TestEnum { def getName = "bar" }