ホームページ >Java >&#&チュートリアル >Java ではメソッドの引数として Optional を使用する必要がありますか?
はじめに:
Java 8 の Optional を使用するのは直感的に思えるかもしれませんが、オプションのパラメータまたは null 許容パラメータをメソッドの引数として処理することは、一般に最適ではないと考えられています。この記事では、この推奨事項が設けられている理由について説明します。
オプションの引数の落とし穴:
1.コードの複雑さ:
引数でオプションを使用すると、メソッド内に条件付きロジックが導入されます。オプションの各引数は無効か存在するかをチェックする必要があるため、分岐とコードがさらに複雑になります。
2.コンパイラの非効率性:
オプションは null 許容オブジェクトのラッパーを表し、不要なオーバーヘッドが発生し、コンパイルに関して null 許容パラメータよりもコストがかかります。
3.オプションの Nullability:
null 値の可能性を明示的に示す null 許容引数とは異なり、オプション自体は null になる可能性があります。この不一致により、null オプションが誤って渡された場合にエラーが発生する可能性があります。
4.冗長性:
オプションの戻り値の型は、値が存在しない可能性をすでに伝えています。メソッドの引数でこの情報を重複させると冗長になり、コードが読みにくくなる可能性があります。
代替オプション:
引数でオプションを使用する代わりに、次の代替オプションを検討してください:
1. Null 許容パラメータ:
パラメータを null 許容として宣言し (たとえば、String p1、BigDecimal p2 を使用)、メソッド内で明示的に null チェックを実行します。これは、オプションを使用するよりも明確で効率的です。
2.メソッドのオーバーロード:
さまざまな引数の組み合わせに対して個別のメソッド オーバーロードを作成します (例: CalculateSomething()、calculateSomething(String)、calculateSomething(BigDecimal)、calculateSomething(String, BigDecimal))。これにより、より直観的で柔軟なインターフェイスが提供されます。
例:
質問に示されているサンプル コードを検討してください。 null 許容パラメータと明示的な null チェックを使用すると、呼び出しコードは次のように簡素化されます:
String p1 = otherObject.getP1().orElse(null); BigDecimal p2 = otherObject.getP2().orElse(null); int result = myObject.calculateSomething(p1, p2);
結論:
一方、Optional は戻り値として null 許容値を処理する便利な方法を提供します。型をメソッドの引数として使用すると、複雑さ、非効率性、冗長性が生じます。 Null 許容パラメーターまたはメソッドのオーバーロードを採用すると、オプションまたは Null 許容入力パラメーターを処理するための、より明確で効率的で保守可能なアプローチが提供されます。
以上がJava ではメソッドの引数として Optional を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。