我有一个非常简单的案例,我做了一些基本的通用分配:
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/