2

プロジェクト内のすべての PMD 警告を削除しようとしましたが、いくつかの問題があります。Container オブジェクトを返すメソッドがあります。これは私の元の方法でした(簡略化):

try {
    return setResult();
} catch (Exception ex) {

}
return null;

PMD は、return ステートメントが 2 つあると警告しました。だから私はこれを試しました:

Container result = null;
try {
    result = setResult();
} catch (Exception ex) {

}
return result;

=> PMD は、null での初期化について警告しました。だから私はこれを試しました:

Container result;
try {
    result = setResult();
} catch (Exception ex) {

}
return result;

=> Eclipse はこれをコンパイルしなかったため、"= null" バリエーションを使用することを提案しました。

ここで何が欠けていますか?PMD 警告なしでこのメソッドを作成するにはどうすればよいですか?

4

1 に答える 1

1

あなたが示す2番目のアプローチを使用します:

Container result = null;
try {
    result = setResult();
} catch (Exception ex) {

}
return result;

PMD が指摘しているように、複雑さを軽減するために不要な return ステートメントを避けることが重要だからです。

PMD のドキュメントでは、NullAssignment ルールを「物議を醸す」と分類しています。その有用性はコンテキストに大きく依存します。彼らが提供するサンプルコードは次のとおりです。

public void bar() {
  Object x = null; // this is OK
  x = new Object();
   // big, complex piece of code here
  x = null; // this is not required
   // big, complex piece of code here
}

そのため、事前に変数に意味のある値を割り当てることができない限りContainer、このコード フラグメントではこのルールを無視する必要があります。

null 割り当てを完全に回避したい場合は、Guava の Optionalを使用できます。この場合、次の利点があります。

  1. 値がないことを考えさせられます
  2. コードをより理解しやすくします
  3. PMDを喜ばせる
于 2013-10-11T06:38:00.153 に答える