【发布时间】:2021-07-18 15:48:22
【问题描述】:
有没有办法像在 Java 中一样覆盖 Scala 3 枚举中的方法?
public enum Test {
ONE {
@Override
public int calc() {
return 1;
}
},
TWO {
@Override
public int calc() {
return 2;
}
};
public abstract int calc();
}
我尝试过类似的方法,但没有结果。也没有在文档中找到任何关于枚举方法覆盖的信息。
enum Test {
def calc(): Int ={
0
}
case One
override def calc(): Int ={
1
}
case Two
override def calc(): Int ={
2
}
}
也许还有其他方法可以实现类似的功能?
【问题讨论】:
-
我不这么认为,尽管它可能是一个方便的功能。我建议现在只使用密封特征和案例类。
-
不,这是不可能的。如果你想要那个功能,Java 和 Kotlin 可以提供,并且有很多方法可以在 Scala 中创建这个功能。但是 Scala 枚举中不允许有可选的匿名类。
-
也可以将
calc作为参数传给Test。 -
如果你的枚举有一个非常复杂的逻辑,你发现覆盖比匹配更清晰,那么你可能一开始就不应该使用枚举。
标签: scala enums anonymous-class scala-3