【问题标题】:How can I call a constructor properly in this case?在这种情况下如何正确调用构造函数?
【发布时间】:2019-05-31 19:06:26
【问题描述】:

我正在尝试调用构造函数来正确处理 3 个不同的类,但我无法做到

public class B {

private final A a;

public B(A a) {
     this.a = a;
}
private final C c = new C(a);
}

我有错误“变量 a 可能没有被初始化”,我知道一种方法,方法是在 B 构造函数中放置第二个参数并在主类 B 中调用它,但还有其他方法吗?

【问题讨论】:

  • 为什么在 B 构造函数中需要第二个参数?只需声明private final C c;,然后在构造函数中声明c = new C(a);
  • 只是想知道:您是否需要更多信息,或者您的问题是否已解决(如果是,请考虑接受其中一个答案)。
  • 感谢您的所有回答!

标签: java constructor field


【解决方案1】:

当然。

public class B {

    private final A a;

    public B(A a) {
        this.a = a;
        c = new C(a);
    }
    private final C c;
}

你的不起作用的原因是声明时的初始化程序在构造函数之前执行。

【讨论】:

    【解决方案2】:

    这里:

    private final C c = new C(a);
    

    在那里,您可以通过在构造函数中简单地分配c also 来避免这种“冲突”:

    public B(A a) {
         this.a = a;
         this.c = new C(a);
    }
    

    当然,当您可以直接在声明中定义字段时,这会大大简化。但有时,在构造函数中这样做是不可避免的。

    【讨论】:

      【解决方案3】:

      初始化ctor中的值

      public class B {
          private final A a;
          private final C c;
      
          public B(final A a) {
               this.a = a;
               this.c = new C(a)
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 1970-01-01
        • 2020-08-06
        相关资源
        最近更新 更多