我猜你将 FOO 混淆为 MyClass 的子类型,而实际上它是一个实例。
使用“普通”泛型,您可以指定占位符的类型:
public class GenericClass <T extends Object> { // a bit contrived here
private T generic;
}
实例化的
GenericClass<String> gen = new GenericClass<>(); // String is a subclass of Object
然后编译成
public class GenericClass {
private String generic;
}
请注意,字符串没有值。没有 String 实例。
为此,我们需要一个 setter 或构造函数:
public class GenericClass<T extends Object> {
private T generic;
public GenericClass(T generic) {
this.generic = generic;
}
}
GenericClass<String> gen = new GenericClass<>("Passing in a String because T was a String");
或
GenericClass<Integer> gen2 = new GenericClass<>(2); // T is integer so we can only pass integers - 2 will be the instance.
因此,对于作为泛型类型的 Enum,我们声明的是 MyType 类型。该值将是 FOO,所以我们需要一个 setter 或一个构造函数:
public class MyClass<T extends MyTypes> {
private T theType;
public MyClass(T theType) {
this.theType = theType;
}
}
为了确保我们有一个 FOO 实例,我们将它传递给构造函数
MyClass<MyTypes> myInstanceWithFoo = new MyClass<>(MyTypes.FOO);
希望这是有道理的。