OK、PMDとFindBugsコードアナライザーでいくつかのコードをレビューした後、レビューしたコードに大きな変更を加えることができました。ただし、修正方法がわからないことがいくつかあります。以下でそれらを繰り返し、(より良い参考のために)各質問に番号を付けます。それらのいずれか/すべてに自由に答えてください。お待ち頂きまして、ありがとうございます。
1.いくつかのルールを削除したとしても、コードを再評価した後も、関連する警告は表示されたままです。なぜですか?
2.宣言を見てください:
private Combo comboAdress;
private ProgressBar pBar;
ゲッターとセッターによるオブジェクトへの参照:
private final Combo getComboAdress() {
return this.comboAdress;
}
private final void setComboAdress(final Combo comboAdress) {
this.comboAdress = comboAdress;
}
private final ProgressBar getpBar() {
return this.pBar;
}
private final void setpBar(final ProgressBar pBar) {
this.pBar = pBar;
}
さて、なぜ最初の宣言ではPMDに関する警告が表示されないのに、2番目の宣言では次の警告が表示されるのでしょうか。
Found non-transient, non-static member. Please mark as transient or provide accessors.
その警告の詳細については、こちらをご覧ください。
3.これもPMDによって与えられた別の警告です:
A method should have only one exit point, and that should be the last statement in the method
その警告の詳細については、こちらをご覧ください。
今、私はそれに同意しますが、私がこのようなものを書いたらどうなりますか?
public void actionPerformedOnModifyComboLocations() {
if (getMainTree().isFocusControl()) {
return;
}
....//do stuffs, based on the initial test
}
私はルールに同意する傾向がありますが、コードのパフォーマンスが複数の出口点を示唆している場合、どうすればよいですか?
4. PMDは私にこれを与えます:
Found 'DD'-anomaly for variable 'start_page' (lines '319'-'322').
私が次のようなものを宣言するとき:
String start_page = null;
nullへの割り当てを削除すると、この情報(警告のレベルはinfo)を削除しますが、コードの後半のある時点で、変数が初期化されていない可能性があるというエラーがIDEから発生しました。だから、私はそれに固執しています。警告を抑えることがあなたにできる最善のことですか?
5. PMD警告:
Assigning an Object to null is a code smell. Consider refactoring.
これは、GUIコンポーネントのシングルトーン使用の場合、または複雑なオブジェクトを返すメソッドの場合です。catch()セクションで結果をnullに割り当てると、不完全/一貫性のないオブジェクトが返されないようにする必要があるため、正当化されます。はい、NullObjectを使用する必要がありますが、それを実行したくない場合があります。その場合、その警告を抑制する必要がありますか?
6. FindBugsの警告#1:
Write to static field MyClass.instance from instance method MyClass.handleEvent(Event)
メソッドで
@Override
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Dispose: {
if (e.widget == getComposite()) {
MyClass.instance = null;
}
break;
}
}
}
静的変数の
private static MyClass instance = null;
この変数を使用すると、フォームがすでに作成されて表示されているかどうかをテストできます。場合によっては、フォームの再作成を強制する必要があります。ここに他の選択肢はありません。洞察はありますか?(MyClassはリスナーを実装するため、オーバーライドされたhandleEvent()メソッドです)。
7. FindBugsの警告#2:
Class MyClass2 has a circular dependency with other classes
この警告は、他のクラスの単純なインポートに基づいて表示されます。この警告を消すために、これらのインポートをリファクタリングする必要がありますか?または、問題はMyClass2に依存していますか?
OK、今のところ十分に言われています。より多くの発見やあなたの答えに基づいて、更新を期待してください。ありがとう。