Java枚举方法返回构造函数中提供的泛型类型?
我想要枚举方法Java枚举方法返回构造函数中提供的泛型类型?,java,generics,enums,Java,Generics,Enums,我想要枚举方法getValue()的通用返回类型。返回的类型应与枚举构造函数中提供的类型相同 public enum ParameterType { NUMBER(int.class), TEXT(String.class); private Class<?> classType; ParameterType(Class<?> _clazz) { classType = _clazz; } pu
getValue()
的通用返回类型。返回的类型应与枚举构造函数中提供的类型相同
public enum ParameterType
{
NUMBER(int.class),
TEXT(String.class);
private Class<?> classType;
ParameterType(Class<?> _clazz)
{
classType = _clazz;
}
public <T> T getValue()
{
String a = "i am a text";
int b = 42;
return classType.cast(a);
//return classType.cast(b);
}
}
公共枚举参数类型
{
编号(国际等级),
文本(String.class);
私有类类型;
参数类型(类_clazz)
{
类类型=_clazz;
}
公共T getValue()
{
String a=“我是一个文本”;
int b=42;
返回classType.cast(a);
//返回classType.cast(b);
}
}
但是,在这种情况下,错误是“无法从捕获#3?转换为T”。此外,不可能在枚举本身上提供泛型“X”类型,该类型可用于类的返回类型
我怎样才能解决这个问题呢?别忘了铸造。请为每个枚举常量重新定义“getValue()”。不能对枚举执行此操作,因为枚举中的所有值都具有相同的类型 为此,您基本上必须手动构建“枚举”:
公共最终类参数类型
{
公共静态最终参数类型编号=新参数类型(42);
公共静态最终参数类型TEXT=新参数类型(“我是文本”);
私有参数类型(T值){
这个值=值;
}
公共T getValue(){return value;}
}
重要的一点是使构造函数私有,因此不能在类之外调用它。这使它有点像枚举,因为您定义的实例是唯一的实例。字符串a,int b的
在实际代码中来自何处?您试图做的不会起作用。最好的方法是让getValue()
方法返回类型看起来像一个重复:?在实际代码中,a
和b
来自参数注入依赖项(在创建枚举本身之后),并根据枚举的类型(数字与文本),返回相应的一个。
public final class ParameterType<T>
{
public static final ParameterType<Integer> NUMBER = new ParameterType<>(42);
public static final ParameterType<String> TEXT = new ParameterType<>("I am a text");
private ParameterType(T value) {
this.value = value;
}
public T getValue() { return value; }
}