错误:无法为最终变量赋值

新手上路,请多包涵

我正在做一项作业,但遇到了这个错误:无法为最终变量计数赋值

到目前为止,这是我的代码……

 public class List
{
    private final int Max = 25;
    private final int count;
    private Person list[];

    public List()
    {
        count = 0;
        list = new Person[Max];
    }

    public void addSomeone(Person p)
    {
        if (count < Max){
            count++; // THIS IS WHERE THE ERROR OCCURS
            list[count-1] = p;
        }
    }

    public String toString()
    {
        String report = "";

        for (int x=0; x < count; x++)
            report += list[x].toString() + "\n";

        return report;
    }
}

我是 java 的新手,显然不是计算机高手,所以请尽可能用最简单的术语解释问题/解决方案。太感谢了。

原文由 Kathryn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

count++; 会抛出错误。根据甲骨文,

final 变量只能赋值一次。声明一个变量 final 可以作为有用的文档,它的值不会改变,并且可以帮助避免编程错误。

您可以 在此处 关注该文章。查看您的代码,您似乎真的不希望 count 成为最终代码。您希望能够在整个程序中更改其值。修复方法是删除 final 修饰符。

原文由 Michael 发布,翻译遵循 CC BY-SA 3.0 许可协议

当你声明一个变量 final 你基本上告诉编译器这个变量是常量并且不会改变。您声明 count final,但您尚未对其进行初始化(设置值)。这就是为什么允许您在构造函数中设置它的值 public List() {} :final 变量可以初始化一次,之后就不能修改了。

不过也有例外,例如,如果您创建了一个 int 值为 count 的对象,并添加了一个 setter,您仍然可以修改最终对象。

例子:

 public class ExampleObject {
    private int count;

    public ExampleObject(int count) {
        this.count = count;
    }

    public void setCount(int count) {
        this.count = count;
    }

    public int getCount() {
        return count;
    }
}

public class ExampleDemo {

    private static final ExampleObject obj = new ExampleObject(25);

    public static void main(String[] args) {
        obj = new ExampleObject(100); //not allowed: cannot assign a value to final variable
        obj.setCount(100); //allowed
    }
}

原文由 nbokmans 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题