error: cannot assign a value to final variable
error: cannot assign a value to final variable
我正在做一项作业,但遇到了这个错误:无法为最终变量计数赋值
到目前为止,这是我的代码...
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 的新手,显然我不是计算机高手,所以请尽可能用最简单的术语解释 problem/solution。非常感谢。
count++;
会抛出错误。根据 Oracle,
A final variable may only be assigned to once. Declaring a variable final can serve as useful documentation that its value will not change and can help avoid programming errors.
您可以跟着那篇文章一起看 here。查看您的代码,您似乎真的不希望 count
成为最终代码。您希望能够在整个程序中更改其值。解决方法是删除 final
修饰符。
当你声明一个变量时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
}
}
它正在抛出错误,因为您已将计数声明为最终变量。最终变量不过是常量。一旦初始化,我们就无法更改最终变量的值。
'final' 关键字用作常量。您可以在声明时分配一个值,或者您可以在构造函数中分配一个值,但也只能分配一次。您不能在代码的下方进一步增加它的值。因此count++会产生错误。
还知道 'final' 与 classes 或函数一起使用时,可以防止它们被继承到子 class。
有一种方法可以使用数组而不是变量并使用它的第一个元素。
final int[] a = new int[1];
我正在做一项作业,但遇到了这个错误:无法为最终变量计数赋值
到目前为止,这是我的代码...
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 的新手,显然我不是计算机高手,所以请尽可能用最简单的术语解释 problem/solution。非常感谢。
count++;
会抛出错误。根据 Oracle,
A final variable may only be assigned to once. Declaring a variable final can serve as useful documentation that its value will not change and can help avoid programming errors.
您可以跟着那篇文章一起看 here。查看您的代码,您似乎真的不希望 count
成为最终代码。您希望能够在整个程序中更改其值。解决方法是删除 final
修饰符。
当你声明一个变量时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
}
}
它正在抛出错误,因为您已将计数声明为最终变量。最终变量不过是常量。一旦初始化,我们就无法更改最终变量的值。
'final' 关键字用作常量。您可以在声明时分配一个值,或者您可以在构造函数中分配一个值,但也只能分配一次。您不能在代码的下方进一步增加它的值。因此count++会产生错误。
还知道 'final' 与 classes 或函数一起使用时,可以防止它们被继承到子 class。
有一种方法可以使用数组而不是变量并使用它的第一个元素。
final int[] a = new int[1];