任何类型的通用结构的枚举类

时间:2014-10-15 20:43:35

标签: java generics enums

我现在试图解决以下问题与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;
}

谢谢大家的帮助!

3 个答案:

答案 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;
    }