在 Java 中实现类似可扩展枚举的东西
Implement something like an extendible enum in Java
为了在 java 中实现多个枚举的类型可替换性,我可以让它们都实现一个接口。但是在 switch-case 中使用接口的对象是具有挑战性的。
- 我不能直接在switch语句中使用接口对象。 switch 语句只接受 enum、char、byte、short、int 和 string。
- 我可以打开
object.getUniqueID()
,其中 getUniqueId
是接口的成员,但在那种情况下,我将不得不对 case 语句的值进行硬编码。哪个 IMO,将是丑陋的,几乎不可能重构。
我们需要的是一个
的实现
- 可以用在switch-case语句中,满足以上两个问题
- 类型可替换。
任何指针都会有所帮助。
您应该使用具有所有可能 enum
值的单个枚举,或者您需要在切换之前检查类型。
MyInterface value = ...
if (value instanceof EnymType1) {
switch((EnumType1) value) {
case ...
}
} else if (value instanceof EnumType2) {
switch((EnumType2) value) {
case ...
}
}
您可以使用 Map<MyInterface, Consumer<MyInterface>>
而不是使用开关,因为它可以动态扩展,但性能接近于开关。
为了在 java 中实现多个枚举的类型可替换性,我可以让它们都实现一个接口。但是在 switch-case 中使用接口的对象是具有挑战性的。
- 我不能直接在switch语句中使用接口对象。 switch 语句只接受 enum、char、byte、short、int 和 string。
- 我可以打开
object.getUniqueID()
,其中getUniqueId
是接口的成员,但在那种情况下,我将不得不对 case 语句的值进行硬编码。哪个 IMO,将是丑陋的,几乎不可能重构。
我们需要的是一个
的实现- 可以用在switch-case语句中,满足以上两个问题
- 类型可替换。
任何指针都会有所帮助。
您应该使用具有所有可能 enum
值的单个枚举,或者您需要在切换之前检查类型。
MyInterface value = ...
if (value instanceof EnymType1) {
switch((EnumType1) value) {
case ...
}
} else if (value instanceof EnumType2) {
switch((EnumType2) value) {
case ...
}
}
您可以使用 Map<MyInterface, Consumer<MyInterface>>
而不是使用开关,因为它可以动态扩展,但性能接近于开关。