Zee*_*mee 4 java generics reflection
根据JavaDocs,newInstance()Method of java.lang.Class并不打算返回null.但我的代码似乎证明了相反的情况.为什么?
public Assessment createAssessment() {
Class<? extends Assessment> assessmentClass = (Class<? extends Assessment>) assessmentClassDataTable.getRowData();
try {
System.out.println("ASSESSMENTCLASS " + assessmentClass);
// -> 'ASSESSMENTCLASS class my.model.ManualSelectAssessment'
Assessment a = assessmentClass.newInstance();
System.out.println("ASSESSMENT " + a);
// -> 'ASSESSMENT null'
return a;
} catch (Exception e) {
Application.handleError(e);
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
它返回null.
newInstance()永远不会返回null.但是newInstance().toString()可以回来"null"
注意:使用newInstance()的一个问题是它可以抛出CheckedException!
public Main() throws IOException {
throw new IOException();
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Main.class.newInstance(); // throws IOException silently.
}
Run Code Online (Sandbox Code Playgroud)
即使IOException是一个检查异常,编译器也不知道newInstance()会抛出这个检查过的异常.如果你试图抓住它,编译器会抱怨它不能被抛出!!