尽管存在 NoArgsConstructor,但出现 java.lang.InstantiationException

标签 java exception inner-classes instantiationexception

当我想创建对象 TransLog 的实例时,即使我在类 TransLog< 中创建了无参数构造函数,也会抛出 InstantiationException/:

Caused by: java.lang.NoSuchMethodException: TransactionLogger$TransLog.<init>()
        at java.lang.Class.getConstructor0(Class.java:3082)
        at java.lang.Class.newInstance(Class.java:412)
        ... 20 more
@AllArgsConstructor
private class TransLog {
  public TransLog() {
  } 

  private int x; 
  private int y;
}

我以这种方式创建实例:

TransLog log = (TransLog) clazz.newInstance(); // clazz is TransLog.class

提前感谢您的帮助:)

最佳答案

您将 TransLog 类声明为 TransactionLogger 类中的非静态内部类。

这意味着TransLog类有一个隐式成员变量 引用封闭的 TransactionLogger 实例, 并且构造函数有一个该类型的隐式附加参数。

看来你不希望这样。 因此,您需要将内部类声明为static:

@AllArgsConstructor
private static class TransLog {
    public TransLog() {
    }

    private int x;
    private int y;
}

关于尽管存在 NoArgsConstructor,但出现 java.lang.InstantiationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53875094/

相关文章:

Ruby 构造函数和异常

iPhone SDK/iOS 在 webview/scrollview 中崩溃?

python - 从另一个嵌套数据类访问嵌套类

java - 对封闭类实例的内部类引用为空

java - 使用扫描仪扫描字数和行数 (Java)

java - 更改和改进了从 Web Servlet 到 Web 服务的数据传递

java - Java 中有很多异常是糟糕的设计吗?

javascript - 如何在内部类中找到正确的 "this"对象?

Java 和 Regex 添加一些换行符

Java:导入资源,使用 "*"?