当前位置: 首页 > 知识库问答 >
问题:

生成类的新实例在运行时失败[重复]

公西培
2023-03-14
public class A {
    public void n() { 
        System.out.println("In A"); 
    }
}

public class B extends A {
    @Override
    public void n() {
        System.out.println("In B");
        super.n();
    }
}

public class C {
    public A m_a;
    public <T extends A> C( Class<T> a ) {
        try {
            m_a = a.newInstance();
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    public void print(){ m_a.n(); };
}
C c = new C( B.class );

但得到以下错误:

java.lang.InstantiationException: testdbvsfile.Main$B
    at java.lang.Class.newInstance(Unknown Source)
    at testdbvsfile.Main$C.<init>(Main.java:63)
    at testdbvsfile.Main.main(Main.java:76)
Caused by: java.lang.NoSuchMethodException: testdbvsfile.Main$B.<init>()
    at java.lang.Class.getConstructor0(Unknown Source)<br>
    ... 3 more

如何使其工作?
谢谢您的帮助。

顺便说一句:我正在使用JRE1.8.0_65

共有1个答案

鞠隐水
2023-03-14

问题是您使用的是非静态内部类。这在堆栈跟踪中很明显,其中b类的名称为main$b,而在其声明中缺少static

非静态成员类的构造函数使用包含类实例的隐式参数。

使内部类静态化可以解决这个问题。您还可以通过将ABC类移出Main类来解决这个问题。

 类似资料:
  • 我从以下链接实现了re运行失败的TestNG测试类的逻辑: 不幸的是,它使用“test”注释运行该方法,而不运行BeforeClass(@BeforeClass)和AfterClass(@AfterClass)方法。我试图研究ITestAnnotations的setDependsOnMethods和getDependsOnMethods方法,但没有成功。 有人知道如何让侦听器类同时运行Before

  • 我正在尝试在Ubuntu14.04 LTS上使用Python2.7构建tensorflow,没有GPU。当我在终端上运行本教程中的以下命令时: 它说无法使用日志进行构建: 这是我的构建环境: OS:Ubuntu14.04 LTS 64位内存12Gib gcc版本:4.8.4 python版本:2.7.6 bazel版本:0.3.2 git版本的tensorflow源代码:v0。11.0rc0-15

  • 我创建了新的Deploy-to-staging项目,并将其配置编辑如下: > 在构建中,选择从另一个项目复制工件选择项目工件 选择生成后操作 我怎么才能修好这个? 我的tomcat凭据位于[tomcat目录]/conf/tomcat-users.xml中,如下所示:

  • 当我尝试生成Android build时,我在Unity Console中遇到以下错误: 到目前为止,我已经集成了移动社交,Facebook,Unipast,UnityIAP插件。在所有这些集成之后,Android build正确地导出了,但是最后我集成了FirebaseMessaging插件,然后在上面的错误开始了,我无法导出build。 在构建导出过程中,我已经解决了很多错误,但上面的错误描述

  • 我一直在尝试调试这个错误,但没有成功。 本质上,我是通过我的应用程序联系外部应用程序的。连接建立良好,应用程序通过回调URL联系回我的应用程序,然后我需要向外部应用程序发送最终验证。最后一步由于SSLhandshajee异常而失败。 javax。网ssl。例外:太阳。安全验证器。ValidatorException:PKIX路径生成失败:sun。安全供应商。certpath。SunCertPath