Java 方法从类变量返回类型
鉴于以下类别:Java 方法从类变量返回类型,java,generics,wildcard,Java,Generics,Wildcard,鉴于以下类别: ... Class<? extends Enum<?>> enumType; public MyClass(Class<? extends Enum<?>> enumType) { super(); this.enumType=enumType; ... ,但这不起作用。使用类型参数而不是通配符。例如: class MyClass<T extends Enum<T>>
...
Class<? extends Enum<?>> enumType;
public MyClass(Class<? extends Enum<?>> enumType) {
super();
this.enumType=enumType;
...
,但这不起作用。使用类型参数而不是通配符。例如:
class MyClass<T extends Enum<T>> {
private Class<T> enumType;
public MyClass(Class<T> enumType) {
this.enumType = enumType;
}
public T getValue() {
// ...
}
}
实际上,您必须在泛型中指定一个变量,而不仅仅是到处使用通配符。然后就是这样,
public class MyClass<E extends EnumType<E>> {
Class<E> enumType;
E value;
public MyClass(Class<E> enumType) {
this.enumType = enumType;
}
public E getValue() {
return value;
}
}
首先,不要使用通配符。不能将enumType作为返回值!是的,我只是一直在尝试产生一个可接受的代码,这是一个。假设我不需要getValue方法,那么如何更好地编写上面的代码?给定您的代码,如何引用t类?我需要迭代T enum的所有值。你的方式让我遇到了另一个问题,那就是定义。MyClass myRef=新的MyClassMyEnum.class;我不想发布参数两次,但我遇到了一个问题,即如果我不将类作为参数提供,我就无法在构造函数中以任何方式引用t的任何属性。有关如何迭代枚举常量的信息,请参阅我的编辑。同样的问题仍然存在。我不想传递e,它由泛型参数确定。这就是我对它们进行迭代的方式,这也是我代码中MyClass不是泛型的原因,而是在构造函数中使用了一个类参数。如果不将类传递给枚举,就无法绕过这个问题。我这样使用它,但这样我需要创建一个新实例:MyClass Myref=MyClassMyEnum.Class;我不打算在定义中两次传递参数,原因有很多,比如MyClass的整个点都有问题,这是创建包含枚举值的组合框的最佳方法。换句话说,当MyEnum.classe是泛型时,我如何引用它?我找不到办法。@AttilaNeparáczki你实际上没有通过两次,只有一次;泛型类型仅在编译时被检查,然后被删除。您会注意到,所有基于枚举的泛型集合(如EnumMap)都有相同的要求。谢谢。有两个非常相似的答案,我接受了另一个,希望没有问题:
public <E extends Enum<E>> void showEnumValues(Class<E> e) {
for (E value : e.getEnumConstants())
System.out.println(value);
}
}
public class MyClass<E extends EnumType<E>> {
Class<E> enumType;
E value;
public MyClass(Class<E> enumType) {
this.enumType = enumType;
}
public E getValue() {
return value;
}
}