gpt4 book ai didi

Java Class.newInstance 错误

转载 作者:行者123 更新时间:2023-11-29 08:04:38 26 4
gpt4 key购买 nike

在下面的代码中,我得到 java.lang.InstantiationException

(下面是独立编译的精简代码——在我的应用程序中,我想维护一个 Enum->Class 映射,并在从文件中读取整数值时,实例化适当的类以查看映射)。

如何消除错误?有语法问题吗?我必须使用接口(interface)吗?我在这里的理解是有限的。

class Main {
abstract class Base {
Base() {};
void print() {
System.out.println("I am in Base");
}
}


class D1 extends Base {
D1() {};
@Override
void print() {
System.out.println("I am in D1");
}
}

static Class<? extends Base> getMyClass() {
return D1.class;
}


public static void main(String[] args) {
try {
Class<?> cc = getMyClass();
Object oo = cc.newInstance();
Base bb = (Base) oo;
bb.print();

} catch (Exception ee) {
System.out.println(ee);
};
}
};

最佳答案

您的代码有两个问题:

  • BaseD1 是非静态内部类。这意味着它们可以访问其声明类 (Main) 的字段和方法,因此它们应该持有对 Main 实例的引用。因此,它们的构造函数有一个类型为 Main 的隐式参数,用于传递该引用。因此,它们没有无参数构造函数,您应该改用单参数构造函数:

    Object oo = cc.getConstructor(Main.class).newInstance(new Main()); 

    或者,您可以简单地将它们声明为 static,或者在 Main 之外声明它们 - 在这种情况下,它们将无法访问 的成员Main 并且不需要引用它。

  • D1 的构造函数应该是public。否则,您需要调用 setAccessible(true) 以使其可访问以进行反射。

关于Java Class.newInstance 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088880/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com