在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);