チェックスタイルは、プライベートクラス変数の場合は「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。