我有一个只能被枚举覆盖的界面 -
interface Parent{
int someMethod();
}
以及我要传递Parent的实现者的方法。此方法希望限制用户传递除枚举之外的任何其他实现者 -
public static <T extends Enum<? extends Parent>> T fromInt(Class<T> enumClass){}
现在问题是
?
。为了访问父类的someMethod
,需要在方法中输入类型。如果我们想这样访问它 -
Arrays.stream(enumClass.getEnumConstants())
.filter(ev -> ((Parent)ev).someMethod() == someVal)
.findFirst().get();
有没有更好的方法来创建此方法的签名来解决这些问题?
答案 0 :(得分:5)
您不能强制接口的实现者只是枚举。
但是,您可以通过说T
类型应为枚举类型,T extends Enum<T>
和Parent
类型,& Parent
来实现您的目标。 &
用于声明多个接口的交集。它确保在方法中,T
可以绑定到Enum
和Parent
。
这将是一个实现:
public static <T extends Enum<T> & Parent> T fromInt(Class<T> enumClass) {
return Arrays.stream(enumClass.getEnumConstants())
.filter(ev -> ev.someMethod() == 1)
.findFirst()
.get();
}