有没有一种方法可以像java一样重写Scala3Enum中的方法?
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
}
}
或许还有其他方法可以实现类似的功能?
3条答案
按热度按时间pcww981p1#
似乎你想要的是目前不可能的,但有其他的方法可以做到这一点。你可以尝试一种老式的密封特征,它可以覆盖
calc
.函数
calc
也可以作为Test
,虽然我不太喜欢这种方法。另一种方法是通过单一方法和模式匹配,就像gianluca aguzzi和andrey tyukin所做的那样,尽管不需要扩展方法。
如果
calc
必须是一个函数,我会建议第一种方法,或模式匹配,如果你觉得它更适合你。如果要重写多个方法,sealed traits也是一个不错的选择,因为不需要单独进行模式匹配,也不需要将一堆lambda聚集到构造函数调用中。如果不是一个函数,我觉得第二个最好。pieyvz9o2#
这个
enum
是密封的,所以事后不能延期,所以没有理由延期override
什么都行。只需在一个地方收集所有案例,而不是多个override
-方法,编写一个涵盖所有案例的方法:jv4diomz3#
在scala 3中,您可以通过组合
enum
与extension method
:我希望我能帮助你:)