我现在试图解决以下问题与java泛型完全混淆。
我有这个功能:
private static Enum<?> findEnumValue(final Class<Enum<?>> cls, final Object value)
{
if (value == null) {
return null;
}
if (value instanceof Enum<?>) {
return (Enum<?>) value;
}
if (value instanceof String) {
for (Enum<?> item : cls.getEnumConstants()) {
if (item.name().equals(value)) {
return item;
}
}
}
return null;
}
我试图将此功能传递给普通枚举,例如,Name
及其值JOHN
,如下所示:
findEnumValue(Name.class, Name.JOHN.name())
但这不起作用。有人可以指出我的错误并解释我做错了什么。
这是Name enum:
public enum Name {
JOHN,
MARK;
}
谢谢大家的帮助!
答案 0 :(得分:2)
您可以使用Class<? extends Enum<?>>
代替Class<Enum<?>>
。 Name.class
不是Class<Enum<?>>
。
答案 1 :(得分:0)
private static <T extends Enum<T>> T findEnumValue(final Class<T> cls,
final Object value) {
if (value == null) {
return null;
}
if (value.getClass() == cls) {
return cls.cast(value);
}
if (value instanceof String) {
return Enum.valueOf(cls, (String)value);
}
return null;
}
答案 2 :(得分:-1)
private static <T extends Enum<T>> T findEnumValue(final Class<T> cls, final Object value)
{
if (value == null) {
return null;
}
if (value instanceof Enum<?>) {
return (T) value;
}
if (value instanceof String) {
for (T item : cls.getEnumConstants()) {
if (item.name().equals(value)) {
return item;
}
}
}
return null;
}