在java中将枚举类型作为参数传递
我有两种类型的枚举:在java中将枚举类型作为参数传递,java,inheritance,enums,Java,Inheritance,Enums,我有两种类型的枚举: public static enum Type1 { T1_A, T1_B } 及 我希望能够编写一个API,它可以将这些枚举(Type1或Type2)中的任何一个作为参数,并对它们进行处理。如何设计一种方法,让我在运行时选择枚举的类型 大意是: void fun(?? type1_or_type2) { // something goes here... } 您可以创建一个不包含任何方法的标记接口,并让枚举实现该接口。接下来,
public static enum Type1 {
T1_A,
T1_B
}
及
我希望能够编写一个API,它可以将这些枚举(Type1
或Type2
)中的任何一个作为参数,并对它们进行处理。如何设计一种方法,让我在运行时选择枚举的类型
大意是:
void fun(?? type1_or_type2) {
// something goes here...
}
您可以创建一个不包含任何方法的标记接口,并让枚举实现该接口。接下来,将接口用作方法的参数类型。定义一个接口,并在枚举类中实现该接口。然后使用接口类型作为参数
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...
}
试试这个:
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
}
}
或者,这可能是一种研究方法:
public interface SomeInterface {
public void interface(Type1 type);
public void interface(Type2 type);
}
可以将枚举类作为参数传递
void fun(Class<? extends Enum<?>> yourEnum) {
// Do something here. Here's how you would get an array of the Enum values.
yourEnum.getEnumConstants();
}
为什么要投否决票??问题很清楚。至少留下一条评论。您认为如何编写一个采用两种不同类型的方法?下面的答案无疑会“起作用”,因为公共接口允许传递实现它的任何东西,但真正的问题是“为什么要这样做?”@BrianRoach这就是问题所在:)我们也有可能的解决方案。@sᴜʀᴇsʜᴀᴛᴛᴀ 经常告诉某人如何做他们不应该做的事情。。。没有用。从长远来看可能更安全,避免有人实现其他答案中建议的接口。我肯定希望避免instanceof,特别是如果有大量枚举可供使用的话。
void fun(Class<? extends Enum<?>> yourEnum) {
// Do something here. Here's how you would get an array of the Enum values.
yourEnum.getEnumConstants();
}
fun(Type1.class);