2017-07-27 5 views
2

を呼び出します。そこで、レコードのアドレスを設定するために次のコードを作成しました(存在する場合)。オプションifPresentは、私は、次のシグネチャを持つプロシージャを呼び出す必要があり、オブジェクトのメソッド

Optional<Address> address = getAddress(); 
if (address.isPresent()) 
    record.setAddress(address.get()); 

はしかし、私は、次の通知を得る:

は、機能的なスタイルに書き換えることができOptional.isPresent()かのようなifPresent

レポート条件に置き換えることができます。

だから私はは素晴らしいと思った、私は私のコードを簡素化するために、このクールなifPresentものを使用するつもりです。それから私は、この行を思い付いた:

getAddress().ifPresent(x -> record.setAddress(x)); 

と1に素敵な、3行を考えました。しかし、私は、メソッド参照

で、このラムダを置き換えSonarLint

から次のようなメッセージを持って、私はは、なぜ私はちょうど単一の変数を設定するためのメソッドを作成する必要があるのと思いましたか?

とにかく、私はOptionalを初めて使用しているので、私はここで何か誤解しているかもしれません。だから、このシンプルなコードを推奨事項とベストプラクティスに従ってどうすればよいですか?

答えて

5

ただ1つの変数を設定するために新しい方法を作成するべきではありません。 SonarLintは、ラムダ式の代わりにメソッド参照を使用する方が良いと推奨しています。

Java 8のメソッド参照については、OracleのWebサイトThe Java Tutorials - Method Referencesを参照してください。 - あなたのケースのために

はSonarLintはちょうどあなたがこれでその行交換したい:私はRecordクラスを置く場合は非静的メソッドは、静的なcontext`から参照することはできません、私は `取得

Record record = ...; 
getAddress().ifPresent(record::setAddress); 
+2

を、私の場合'getAddress()。ifPresent(record :: setAddress);'(オブジェクトを記録する)コンパイルします。大丈夫ですか? –

+1

あなたの例では 'record' – lucasvw

+0

という正しい名前の' Record'の代わりに変数名を使用してください。レコードの代わりにレコードを使うべきです。ありがとう、@lucasvw –

関連する問題