Java:如何编写接受实现给定接口的Enum常量的泛型函数?

时间:2014-02-11 16:38:24

标签: java generics enums type-safety enumset

所以我有一堆枚举,它们都扩展了界面:

public interface MyInterface {}

然后我有几个扩展界面的枚举:

public enum A implements MyInterface {}

public enum B implements MyInterface {}

我想要一个只接受扩展此接口的枚举的函数。我不能这样做:

public void MyFunction(MyInterface input)

因为在函数内部,我使用EnumSet.of(输入)创建一个EnumSet。我做了

public <T extends Enum<T>> void myFunction(T input)

因为在函数内部,我需要创建一个需要传递给另一个函数的Map。那么有没有任何类型安全的方法来做这个没有铸造?

编辑:更正了界面定义。

1 个答案:

答案 0 :(得分:13)

您可以为类型参数指定多个边界:

public <T extends Enum<T> & MyInterface> void myFunction(T input)

注意:您缺少该方法的返回类型。我在这里给了void。相应地改变。哦!请遵循Java命名约定。方法名称应以小写字母开头。