我想为枚举方法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);
}
}
但是,在这种情况下,错误是“无法从捕获#3?转换为T”。此外,无法在枚举本身上提供通用的“X”类型,可以在类的情况下用于返回类型。
我该如何解决这个问题?
答案 0 :(得分:0)
忘记施法。为每个枚举常量重新定义'getValue()'。
答案 1 :(得分:0)
您无法使用枚举执行此操作,因为枚举中的所有值都具有相同的类型。
要做到这一点,你必须手工建立“枚举”:
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; }
}
重要的一点是使构造函数私有,因此不能在类外部调用它。这使得它有点像枚举,因为您定义的实例是唯一的实例。