枚举类 valueOf 后强转的问题
遇上过的最诡异的问题了。。。
在自己查看、修改源码的时候,用 maven
打包时报错了,但是却不是我改的地方,为此,我写了个小测试试了一下这个代码
import org.junit.jupiter.api.Test;
public class EnumTest {
@Test
public void testValueOf(){
Week monday = getByName(Week.class, "monday");
}
private <T> T getByName(Class<T> type, String name){
if(Enum.class.isAssignableFrom(type)){
return type.cast(Enum.valueOf((Class<? extends Enum>) type, name));
}
return null;
}
}
enum Week{
monday,
tuesday,
wednesday,
thursday,
friday,
saturday,
sunday
}
点击执行的时候,总是提示编译错误,Object 无法转换为T。虽然他们应该是同一个对象
最后我将代码略作修改
// 将一行代码拆成了两行
// return type.cast(Enum.valueOf((Class<? extends Enum>) type, name));
Enum value = Enum.valueOf((Class<? extends Enum>) type, name);
return type.cast(value);
测试顺利通过。。。