我有两种类型的枚举:
public static enum Type1 {
T1_A,
T1_B
}
和
public static enum Type2 {
T2_A,
T3_B
}
我希望能够编写一个API,可以将这些枚举(Type1
或Type2
)作为参数,并对它们执行某些操作。如何设计一个让我在运行时选择枚举类型的方法?
产生效果:
void fun(?? type1_or_type2) {
// something goes here...
}
答案 0 :(得分:7)
您可以创建一个没有方法的标记接口,让枚举实现该接口。接下来,使用接口作为方法的参数类型。
答案 1 :(得分:3)
定义一个接口,并在枚举类中实现该接口。然后使用Interface类型作为参数
interface Type {
...
}
public static enum Type1 implements Type {
T1_A,
T1_B
}
public static enum Type2 implements Type {
T2_A,
T2_B
}
void fun(Type aType) {
// something goes here...
}
答案 2 :(得分:3)
或者,这可能是一种看待的方法:
public interface SomeInterface {
public void interface(Type1 type);
public void interface(Type2 type);
}
答案 3 :(得分:1)
试试这个:
interface Marker {
}
enum Type1 implements Marker {
T1_A, T1_B
}
enum Type2 implements Marker {
T2_A, T3_B
}
void fun(Marker e) {
// something goes here...
if (e instanceof Type1) {
// Do Type1 specific
} else if (e instanceof Type2) {
// Do Type2 specific
}
}
答案 4 :(得分:0)
您可以将Enum类作为参数传递。
$request.getRequestedSessionId()
你会传递Type1。
void fun(Class<? extends Enum<?>> yourEnum) {
// Do something here. Here's how you would get an array of the Enum values.
yourEnum.getEnumConstants();
}