为什么newInstance()返回null?

时间:2013-09-03 14:26:24

标签: java generics reflection

根据JavaDocsnewInstance() 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;
}

返回null。

1 个答案:

答案 0 :(得分:7)

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.
}

即使IOException是一个检查异常,编译器也不知道newInstance()会抛出这个检查过的异常。如果你试图抓住它,编译器会抱怨它不能被抛出!!