【问题标题】:Variable might already have been assigned变量可能已经被赋值
【发布时间】:2012-09-06 18:55:07
【问题描述】:

以下代码有错误:

class A
{

  private final String val;

  public A(){
    this.val = null;
  }

  public A(String val){
    this();
    this.val = val;
  }
}

错误是“可能已经分配了变量 val

是否有解决此错误的方法,而无需重新编写默认构造函数中可能存在的任何代码?这是一个最小的工作示例;如果您问自己“默认构造函数中的代码是什么”,请记住,一个真实的示例可能包含大量您不想在其他构造函数中重复的代码(分配其他最终变量等)。

还请记住,这是一个最小的例子,同样的问题存在于大量的构造函数中。

【问题讨论】:

    标签: java constructor constructor-chaining variable-initialization


    【解决方案1】:

    您的链接方向错误。我也花了一些时间才弄清楚,但是像这样改变你的例子:

    class A
    {
    
      private final String val;
    
      public A(){
        this(null);
      }
    
      public A(String val){
        this.val = val;
      }
    }
    

    【讨论】:

    • 感觉有点精神分裂?
    • 是什么导致原始链接不正确? Java 规范中是否有某些内容表明您不能按照指示进行链接?
    • @EricB。这种情况下的问题是,他的变量 val 是一个最终变量。它只能分配一次。因此,如果他从他的其他构造函数中调用无参数构造函数,则该变量将被赋值为 null。然后他尝试将 参数 val 的值分配给它,但他不能这样做,因为他将变量声明为 final。这会导致编译错误。
    • @Sebastian_H 当然。我错过了final关键字。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多