我有一个接口,只能被枚举覆盖 -
interface Parent{
int someMethod();
}
Run Code Online (Sandbox Code Playgroud)
以及我要传递Parent的实现者的方法.此方法希望限制用户传递除枚举之外的任何其他实现者 -
public static <T extends Enum<? extends Parent>> T fromInt(Class<T> enumClass){}
Run Code Online (Sandbox Code Playgroud)
现在的问题是
?.为了访问someMethod父类,需要在方法中输入类型.如果我们想像这样访问它 -
Arrays.stream(enumClass.getEnumConstants())
.filter(ev -> ((Parent)ev).someMethod() == someVal)
.findFirst().get();
Run Code Online (Sandbox Code Playgroud)是否有更好的方法来创建此方法的签名来解决这些问题?
您不能强制接口的实现者只是枚举.
但是,你可以通过说类型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();
}
Run Code Online (Sandbox Code Playgroud)