チェックスタイルは、プライベートクラス変数の場合は「finalとして宣言する必要がある」と述べています。
class Test {
private int x=1;
public void set(int x) {
this.x = x;
}
}
上記の場合、xをfinalとして宣言するように呼び出しますが、xをfinalとして宣言すると、コンストラクターでの初期化でエラーが発生します。キャッチは何ですか?
チェックスタイルは、プライベートクラス変数の場合は「finalとして宣言する必要がある」と述べています。
class Test {
private int x=1;
public void set(int x) {
this.x = x;
}
}
上記の場合、xをfinalとして宣言するように呼び出しますが、xをfinalとして宣言すると、コンストラクターでの初期化でエラーが発生します。キャッチは何ですか?
ただし、x を final として宣言すると、コンストラクターでの初期化時にエラーが発生します。
静的フィールドを初期化するには、静的ブロックを使用します。
そして、なぜそうあるべきかfinal
...その理由は
private static
できません。final
、作成する必要はありませんstatic
したがって、削除するかstatic
使用しますfinal private static
さて、コードの他の部分:
public void set(int x) {
this.x = x;
}
問題:
static
を使用してフィールドにアクセスしないでくださいthis
。static final フィールドの値は変更できません。
x を静的にする必要がある場合は、メソッドを次のように変更します。
public static void setX(int newX){
[...]
静的メソッドでは「this」を使用できないことに注意してください。
これで問題が解決するはずです。
セッターを介して変更するためprivate
にフィールドにアクセスできるようにするのは悪いスタイルです。static
次のいずれかを行う必要があります。
1)フィールドを作成し、そのメソッドをx
final
削除します。set
また
2) フィールドをx
非静的にする (static
キーワードを削除する) と、それを作成する必要がなくなりますfinal
。