我希望枚举方法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“类型,该类型可用于类的情况下的返回类型。
我该如何解决这个问题?
发布于 2018-05-26 19:57:45
别管选角的事了。请为每个枚举常量重新定义‘getValue()’。
发布于 2018-05-26 20:53:12
您不能使用枚举做到这一点,因为枚举中的所有值都具有相同的类型。
要做到这一点,基本上必须手动构建“枚举”:
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; }
}重要的一点是使构造函数成为私有的,这样就不能在类外部调用它。这使得它有点像枚举,因为您定义的实例是唯一的实例。
https://stackoverflow.com/questions/50542274
复制相似问题