在java中,用于Enum.valueOf()的正确类泛型是什么?

Sco*_*pta 2 java generics

我有这样的设置

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泛型地狱中并且没有正确的答案而不抑制警告?

hev*_*ev1 5

您可以使用它&来确保它Tenumand 实现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)