我有这样的设置
interface A {}
enum B implements A {
TEST;
}
class C<T extends Enum<? extends A>> {
public C(T t) {
T test = (T) T.valueOf(t.getClass(), "TEST");
}
}
Run Code Online (Sandbox Code Playgroud)
有效...但是理想情况下我想将 C 更改为类似
class C<T extends Enum<? extends A>> {
public C(Class<T> t) {
T test = (T) T.valueOf(t, "TEST");
}
}
Run Code Online (Sandbox Code Playgroud)
但是执行第二个操作无法编译。这里使用的正确的 Class<> 泛型是什么?Class<? extends Enum>有效,但随后我收到有关原始仿制药的警告。使用Class<? extends Enum<?>>让我回到错误。我知道我可以只使用第一个选项并调用getClass(),或者甚至只是抑制原始泛型的警告,但我想了解正确的泛型类型是什么......或者我只是在Java泛型地狱中并且没有正确的答案而不抑制警告?
您可以使用它&来确保它T是enumand 实现A:
class C<T extends Enum<T> & A> {
public C(Class<T> t) {
T test = Enum.valueOf(t, "TEST");
}
}
Run Code Online (Sandbox Code Playgroud)