According to the JavaDocs, the newInstance()
Method of java.lang.Class
is not intented to return null.
But my code seems to prove the opposite. Why?
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;
}
It returns null.
newInstance() never returns null
. However newInstance().toString()
can return "null"
Note: One gotcha with newInstance() is that it can throw a CheckedException !
public Main() throws IOException {
throw new IOException();
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
Main.class.newInstance(); // throws IOException silently.
}
Even though IOException is a check exception, the compiler has not idea the newInstance() will throw this checked exception. If you try to catch it the compiler will complain it cannot be thrown !!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With