2017-10-31 6 views
1

私は次のコードスニペットのSonarの問題にアクセスする前に "Optional#isPresent()"呼び出しを取得しています。値にアクセスする前に "Optional#isPresent()"を呼び出してください

List <Department> deptList =new ArrayList(); 

List<Student> studList=new ArrayList(); 

Department dept= studList.stream().min(comparator.comparing(Department::getDepartmentNo)).get(); 

コール "オプション#isPresent()" 値にアクセスする前に。 「ヌル」は空のリストの場合に1つの値でなければなりませんあなたのコードの作業のために

+2

'studList'が空の場合はどうなりますか? –

+2

このコードを実行すると、例外が発生します。それがあなたに警告するものです。 – shmosel

答えて

1

、オプション(ここでは許さ言葉でヘクタール、冗長性)から安全な1つ以上のオプションを使用し

Department dept= studList.stream().min(comparator.comparing(Department::getDepartmentNo)).orElse(null); 

私は文脈を知らないので、ヌルを入れてください、ヌルを使用しないでください!正しい値を選択してください。

1

Optional#get()は何も入っていないと例外をスローします。 nullポインタ例外

Optional<Department> deptOpt= studList.stream().min(comparator.comparing(Department::getDepartmentNo)); 

Department department = null; 
if(deptOpt.isPresent()) 
    department = deptOpt.get(); 
} 

物事のより良い方法を防ぐために、ソナーは、以下のスニペットのように値を取得する前に、オプションをチェックするためにあなたを望んでいるが、私はOptionalクラスの全体的なアイデアとして、それをお勧めしませんですfololowingです:

この場合
Department department = deptOpt.orElse(Department::new); 

、deptOptは(空である)オプションは、任意の値が含まれていない場合には、デフォルトの部門オブジェクトを返します。

いずれにしても、あなたが選んだアプローチはソナーの問題を解決するはずです。

関連する問題