java - 如何在java中转换为CRTP?

标签 java generics enums crtp

我有一个非常简单的案例,我做了一些基本的通用分配:

final Detail detail = field.getAnnotation(Detail.class);
final String example = detail.example();
final Class<?> type = field.getType();
if (List.class.isAssignableFrom(type))
                    ...
else if (Enum.class.isAssignableFrom(type))
    setValue(contract, field, Enum.valueOf(type, example));
else if (...)
.....

但是Enum.valueOf()调用起来有点困难,就我而言,错误是:

valueOf(java.lang.Class,java.lang.String) in java.lang.Enum cannot be applied to (java.lang.Class,java.lang.String)

这是完全有道理的,因为类型是 Class<Object> 。但自从 Enum是CRTP,我找不到一个好的方法来转换类型以使编译器满意。正在使用原始类型 Enum.valueOf((Class)type, example))唯一的答案是什么?它给了我 2 个警告,而不是只有一个。

最佳答案

以下行将仅发出一个警告:

...
setValue( contract, field, Enum.valueOf( type.asSubclass( Enum.class ), example ) );
...

关于java - 如何在java中转换为CRTP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1458779/

相关文章:

java - 如何在Java中包装多个方法?枚举不是正确的方法吗?

使用UnboundID LDAP SDK api的Java问题(调用带参数的方法)

java - 从 Groovy 类创建 Spring bean 导致 "cannot find symbol error"

java - 使用泛型作为方法参数

Java泛型集合疑惑

c++ - 使用 boost spirit qi 解析器解析枚举

java - 提高 Java 的 BigInteger 性能

java - jboss as 7 在 webapp 初始化期间以编程方式查询管理端口

java - 通配符背后的目的是什么?它们与泛型有何不同?

ruby-on-rails - ActiveRecord::Enum - PG::InvalidTextRepresentation:错误:整数输入语法无效: