java - 对于不扩展 Enum 的泛型,Enum.valueOf 的替代品?

标签 java generics enums

我有以下代码

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/

相关文章:

c# - 带有枚举参数的方法的 Web API 帮助页面

java - 将 Ordinal Enum 值设置为从 1 而不是 0 开始

java - Spliterator - 大小旗帜与小型旗帜

java - PreparedStatement 的 setInt() 不适用于 PostgreSQL

c# - 为整数键控模型集合寻找优雅/高效的解决方案

f# - F# 中的通用模块

Python 枚举 : how to make enum member to behave like zero?

java - 如果动态 Web 元素没有任何值,则分配什么值

java - 如何配置 JpaPersistModule?

java - Java 中的泛型类型