覆盖 Java 枚举中的泛型方法
Override generic method in Java enum
为了为通用 public 方法的每个枚举实例提供特定行为,我们可以执行以下操作:
public enum Action {
a{
void doAction(...){
// some code
}
},
b{
void doAction(...){
// some code
}
},
c{
void doAction(...){
// some code
}
};
abstract void doAction (...);
}
有什么方法可以对枚举中定义的抽象泛型方法进行具体实现吗?
例如:
abstract<T> T doAction (T t);
我在其他问题中读到它不应该是可能的,但我一直在努力寻找解决方法并想出了过于复杂的装置。也许泛型不是正确的方法。有没有更简单的方法来实现这个?
是的,你可以做到。只需保留抽象方法定义,在每个枚举常量中,您必须执行以下操作:
a{
@Override
<T> T doAction(T t) {
//your implementation
}
}...
但是,请注意 a
常量中的 T
类型参数与 b
常量的 T
类型参数不同,因此上。
完成后,您可以像这样使用它:
String string = Action.a.<String>doAction("hello");
或
Integer integer = Action.b.<Integer>doAction(1);
在这里显式提供类型是完全可选的,因为编译器将根据提供的参数类型推断结果类型。
为了为通用 public 方法的每个枚举实例提供特定行为,我们可以执行以下操作:
public enum Action {
a{
void doAction(...){
// some code
}
},
b{
void doAction(...){
// some code
}
},
c{
void doAction(...){
// some code
}
};
abstract void doAction (...);
}
有什么方法可以对枚举中定义的抽象泛型方法进行具体实现吗?
例如:
abstract<T> T doAction (T t);
我在其他问题中读到它不应该是可能的,但我一直在努力寻找解决方法并想出了过于复杂的装置。也许泛型不是正确的方法。有没有更简单的方法来实现这个?
是的,你可以做到。只需保留抽象方法定义,在每个枚举常量中,您必须执行以下操作:
a{
@Override
<T> T doAction(T t) {
//your implementation
}
}...
但是,请注意 a
常量中的 T
类型参数与 b
常量的 T
类型参数不同,因此上。
完成后,您可以像这样使用它:
String string = Action.a.<String>doAction("hello");
或
Integer integer = Action.b.<Integer>doAction(1);
在这里显式提供类型是完全可选的,因为编译器将根据提供的参数类型推断结果类型。