Java 为什么newInstance()返回null?

Java 为什么newInstance()返回null?,java,generics,reflection,Java,Generics,Reflection,根据,java.lang.Class的newInstance()方法不打算返回null。 但我的代码似乎正好相反。为什么? public Assessment createAssessment() { Class<? extends Assessment> assessmentClass = (Class<? extends Assessment>) assessmentClassDataTable.getRowData(); try {

根据,java.lang.Class的
newInstance()
方法不打算返回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;
}
public Assessment createAssessment(){
类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()会抛出这个检查异常。如果您试图捕获它,编译器会抱怨它无法抛出!!

ManualSelectAssessment的
toString
方法能否返回
“null”
?大概您确定它没有抛出异常,被捕获然后返回null?确保您的类具有无参数构造,或者您正在打印未“返回”的
a.toString()的结果
null
。查看
a==null
。当您使用默认构造函数实例化时,tostring方法中有一些东西没有值。难道
IOException
不会被包装在
InstantiationException
中吗?InstantiationException是当
类对象表示抽象类时,接口、数组类、基元类型或void,或者该类没有空构造函数
调用
构造函数时会出现
执行异常
有趣的是,我一直认为它的功能类似于
InvocationTargetException
。这绝对是个难题。@PaulBellora在编译器不知道(没有JNI)的情况下抛出CheckedException的四种方法之一:PI必须对此进行更新,谢谢你教我一些东西。