我的代码:
private static <T> T get(Class<T> clazz) throws IllegalAccessException,InstantiationException { if (clazz.equals(String.class)) { return (T) new String("abc");//line x } else { return clazz.newInstance(); } }
如您所见,在第x行中,T必须是String.class并返回String.但是编译失败而没有将结果转换为T.
更改第x行以返回新的字符串(“abc”);结果不兼容的类型.
解决方法
编译器不考虑if语句.
所以它看到的只是你需要返回一个T(它没有进一步的知识).它没有推断出T必须是String.
您可以通过执行操作避免出现“未经检查的强制转换为已擦除类型”的警告
return clazz.cast("abc");