我有以下代码
protected <T> T func(Class<T> c) {
if (c.isEnum()) {
try {
return c.cast(Enum.valueOf(c, "string"));
} catch (IllegalArgumentException e) {
return null;
}
}
return null;
}
IDEA 报告错误 Wrong 1st argument type. Found: 'java.lang.Class<T>', required: 'java.lang.Class<T>'
于 valueOf
功能。我可以通过指定 <T extends Enum<T>>
来避免此错误在函数头中,但想法是 T
可以是多种类型,而不仅仅是枚举。是否可以在不限制的情况下编译/运行代码 T
?
最佳答案
我没有使用Enum.valueOf()
,而是使用了Class.getEnumConstants()
protected <T> T func(Class<T> c) {
if (c.isEnum())
for (T t : c.getEnumConstants())
if (((Enum<?>) t).name().equals("KG"))
return t;
return null;
}
这样编译时不会发出警告,但我不确定这是否是您想要的。
关于java - 对于不扩展 Enum 的泛型,Enum.valueOf 的替代品?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47559009/