我搜索了我的用例并找到了一些有趣的答案,但它们并不像我需要的那样合适.适当的方法是什么:
@SuppressWarnings("unchecked")
public <T> T newInstance(String name) throws ClassCastException, InstantiationException, IllegalAccessException, ClassNotFoundException {
return (T) loadClass(name).newInstance();
}
Run Code Online (Sandbox Code Playgroud)
或者有点不同:
public <T> T newInstance(String name, Class<T> c) throws ClassCastException, InstantiationException, IllegalAccessException, ClassNotFoundException {
return c.cast(loadClass(name).newInstance());
}
Run Code Online (Sandbox Code Playgroud)
我认为这两种方法都是一样的.从我的观点来看,方法1因为参数较少而更好.两个人扔了一个ClassCastException对我来说没问题.确实,@SuppressWarnings("unchecked")注释并不好.
有人能告诉我一种方法对另一种方法有什么好处吗?
编辑:Jon Skeet的回答是正确的.以下代码段可以提供额外的说明.
public class Test {
public static void main(String[] args) {
Object o = new Object();
// Exception at c.cast(o)
Test.<String>realCast(o, String.class);
}
private static <T> T realCast(Object o, Class<T> c) {
return c.cast(o);
}
}
Run Code Online (Sandbox Code Playgroud)
无法转换 …