4

JavaDocsによると、newInstance()Method ofjava.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 を返します。

4

1 に答える 1

7

newInstance() は を返しませんnull。ただしnewInstance().toString()返品可能"null"

注: newInstance() に関する問題の 1 つは、 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() がこのチェック例外をスローすることを認識していません。それをキャッチしようとすると、コンパイラはスローできないと文句を言うでしょう!!

于 2013-09-03T14:30:03.120 に答える