我在互联网上检查了是否可以在java中的构造函数中重新分配最终变量,并且在所有可能的地方进行了重新赋值。但是对我来说,在2019年6月的月食中,尝试这样做会给我一个错误:
谢谢您的帮助!
以下与文本相同的代码:
public class FinalClass {
final int n = 5;
}
class InheritedClass extends FinalClass {
{
n = 6;
}
}
从命令行编译时会产生此错误:
C:\stuff>javac FinalClass.java
FinalClass.java:7: error: cannot assign a value to final variable n
n = 6;
^
1 error
答案 0 :(得分:4)
如果您可以在Java的构造函数中以及在所有可能的地方重新分配最终变量
他们确实说,您可以(实际上:必须)从类自己的构造函数中准确地一次分配一次。
他们没有说您可以重新分配最终字段,也没有说您可以从子类构造函数中完成。他们不这么说,因为你不能。
如果希望由子类指定该值,则需要一个protected
构造函数,子类可以调用该构造函数。而且由于无法重新分配值,因此需要编写一个无参数的构造函数来设置默认值。
public class FinalClass {
final int num;
public FinalClass() {
this.num = 5; // or: this(5);
}
protected FinalClass(int num) {
this.num = num;
}
}
public class InheritedClass extends FinalClass {
public InheritedClass() {
super(6);
}
}