0

检查风格说,对于私有类变量“必须声明为 final”。

class Test {
    private int x=1;

    public void set(int x) {
        this.x = x;
    }
}

在上述情况下,它调用将 x 声明为 final,但是将 x 声明为 final 会在构造函数中初始化它时出错。有什么问题?

4

3 回答 3

0

通过 setter 进行修改private和字段访问是一种糟糕的风格。static您必须执行以下操作之一:

1)为它制作字段x final并删除set方法。

任何一个

2)使字段x非静态(删除static关键字),则不需要 make 它final

于 2013-03-05T07:46:45.967 回答
0

您不能更改静态最终字段的值。

如果您真的需要 x 是静态的,请将您的方法更改为

public static void setX(int newX){
    [...]

请记住,在静态方法中不能使用“this”。

这应该可以解决您的问题。

于 2013-03-05T07:48:53.133 回答
0

但是将 x 声明为 final 会在构造函数中初始化它时出错

要初始化静态字段,请使用static block

而且,为什么应该是final......原因是

  1. 它是private static并且不能从外部访问。
  2. 如果不需要,final则无需制作static

所以,要么删除要么static使用final private static

现在,您的另一部分代码:

public void set(int x) {
    this.x = x;
}

问题:

  1. static不应使用 访问字段this
  2. 使用静态块初始化静态字段。
于 2013-03-05T07:48:24.097 回答