[解決済み】セッターが "this "を返すのはバッドプラクティスか?
2022-04-15 05:09:57
質問
javaでセッターが "this"を返すのは良いアイデアですか悪いアイデアですか?
public Employee setName(String name){
this.name = name;
return this;
}
このパターンは、次のようにセッターを連鎖させることができるので便利です。
list.add(new Employee().setName("Jack Sparrow").setId(1).setFoo("bacon!"));
ではなく、このように
Employee e = new Employee();
e.setName("Jack Sparrow");
...and so on...
list.add(e);
...しかし、それは標準的な慣習に反しているようなものです。セッターに何か他の便利なことをさせることができるというだけで、価値があるのかもしれませんね。このパターンが使われているのを見たことがありますが(JMockやJPAなど)、一般的ではなく、このパターンがどこでも使われているような、非常によく定義されたAPIにのみ使われているようです。
更新しました。
私が説明したことは明らかに有効ですが、私が本当に求めているのは、これが一般的に受け入れられるかどうか、また、落とし穴や関連するベストプラクティスがあるかどうかについての考えです。私はBuilderパターンについて知っていますが、私が説明しているものよりももう少し複雑です。Josh Blochが説明しているように、オブジェクトを作成するために関連する静的なBuilderクラスがあります。
解決方法は?
特に問題はなく、スタイルの問題だと思います。 こんな時に便利です。
- 一度に多くのフィールドを設定する必要がある(構築時を含む)
- コードを書いている時点で、どのフィールドを設定する必要があるか分かっている場合。
- どのフィールドを設定するかは、さまざまな組み合わせがあります。
この方法の代替案としては、以下のようなものが考えられます。
- 1つの巨大なコンストラクタ(欠点:多くのヌルやデフォルト値を渡す可能性があり、どの値が何に対応するかを知るのが難しくなる。)
- オーバーロードされた複数のコンストラクタ(欠点:いくつもあると扱いにくくなる)。
- ファクトリー/スタティックメソッド(デメリット:オーバーロードされたコンストラクタと同じで、数が多くなると扱いにくくなります。)
一度に数個のプロパティを設定するだけなら、'this'を返す価値はないと言える。 後で何か他のもの、例えばステータスや成功のインジケータやメッセージを返すことにした場合、確かにそれは失敗する。
関連
-
[解決済み] JavaでFileFilterを作るには?
-
[解決済み] スリーピング中のスレッドが割り込まれ、データベースへの接続が失われる
-
[解決済み] Spring ApplicationContext - リソースリーク: 'context' が閉じられない
-
[解決済み] Javaでdoubleをfloatに変換する
-
[解決済み] どのような場合に '$this' よりも 'self' を使うべきですか?
-
[解決済み] ランダムな文字列を使用するこのコードは、なぜ "hello world" と表示されるのですか?
-
[解決済み] Javaで新しいListを作成する方法
-
[解決済み] モックされたメソッドに渡された引数を返すようにする
-
[解決済み] メソッドの戻り値の型を汎用的にするにはどうすればよいですか?
-
[解決済み] System.gc()を呼び出すのはなぜ悪い習慣なのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] トークンのシンタックスエラー、これらのトークンを削除してください [closed].
-
[解決済み] ストリングビルダー.イコール Java
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] Cloneable throws CloneNotSupportedException
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] Java の条件付きコンパイル:コードチャンクをコンパイルしないようにするには?
-
[解決済み] javax.naming.NameNotFoundException
-
[解決済み] 型の不一致:ArrayListからListへの変換ができない
-
[解決済み] javaでAnnotation Inheritanceのようなものはあるのでしょうか?