将枚举类型作为参数传递给java

时间:2014-02-17 08:41:23

标签: java inheritance enums

我有两种类型的枚举:

public static enum Type1 {
  T1_A,
  T1_B
}

public static enum Type2 {
  T2_A,
  T3_B
}

我希望能够编写一个API,可以将这些枚举(Type1Type2)作为参数,并对它们执行某些操作。如何设计一个让我在运行时选择枚举类型的方法?

产生效果:

    void fun(?? type1_or_type2) {
         // something goes here...
    }

5 个答案:

答案 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();
}