更好的方法来创建一个限制用户只传递一种枚举的方法

时间:2015-11-05 12:54:10

标签: java enums

我有一个只能被枚举覆盖的界面 -

interface Parent{
    int someMethod(); 
}

以及我要传递Parent的实现者的方法。此方法希望限制用户传递除枚举之外的任何其他实现者 -

public static <T extends Enum<? extends Parent>> T fromInt(Class<T> enumClass){}

现在问题是

  1. 枚举签名是不干净的,并使用?
  2. 为了访问父类的someMethod,需要在方法中输入类型。如果我们想这样访问它 -

    Arrays.stream(enumClass.getEnumConstants())
                .filter(ev -> ((Parent)ev).someMethod() == someVal)
                .findFirst().get();
    
  3. 有没有更好的方法来创建此方法的签名来解决这些问题?

1 个答案:

答案 0 :(得分:5)

您不能强制接口的实现者只是枚举。

但是,您可以通过说T类型应为枚举类型,T extends Enum<T>Parent类型,& Parent来实现您的目标。 &用于声明多个接口的交集。它确保在方法中,T可以绑定到EnumParent

这将是一个实现:

public static <T extends Enum<T> & Parent> T fromInt(Class<T> enumClass) {
    return Arrays.stream(enumClass.getEnumConstants())
                 .filter(ev -> ev.someMethod() == 1)
                 .findFirst()
                 .get();
}