[英]Alternatives to Enum.valueOf for a generic that doesn't extend Enum?
我有以下代码
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
函数中Wrong 1st argument type. Found: 'java.lang.Class<T>', required: 'java.lang.Class<T>'
。 我可以通过在函数头中指定<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;
}
这样,它可以毫无警告地进行编译,但是我不确定这是否是您想要的。
快速,令人不快的答案(我敢肯定会有更好的答案)。
在valueOf
使用c
之前,您始终可以将其valueOf
为Class
。 所以
return (T) Enum.valueOf((Class) c, "string");
会工作; 如果您知道唯一可以提供的Enum
类具有一个名为string
的枚举常量。
可能也有一些警告要禁止在那里...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.