siteHOMEまとめOSSOthersContactメニューRSSFeedlyホーム>技術メモJavaジェネリクス:自身を返すメソッドを上位クラスで定義する2018年9月16日ジェネリクスを使うことによって、自分自身を返すメソッドを上位クラスで定義する方法がある。下位クラスを追加する際に面倒な記述の必要はない。問題の根源ここでは、以下のようなクラス階層を使う。Catクラス定義は以下のようなものだ(一つのJavaクラス内で使用できるようstaticにしてある)。{}このとき、Animalにたくさんの共通メソッドを格納し、そのメソッドの返り値として、下位クラスを返すようにしたいのである。通常であればこんなところだろう。}}Dogオブジェクトのメソッドの返り値がDogオブジェクトであって欲しい理由としては、以下のようないわゆるフルーエントインターフェースにしたいからだ。Dog().setSize(100).setBow("bowbow");見てわかる通り、この方式ではAnimalのメソッドを追加していくと、その分だけDogにもCatにも追加しなければならなくなる。これはいかにも面倒だ。以下のようにすればよい。}この方式では、Animalに定義されたメソッドをDogで再定義する必要は無い。それでいてAnimalのメソッドの返り値がDog型になってくれる。Dog().setSize(100).setBow("bowbow");デメリットしかしデメリットもある。Catの上位であるAnimalを扱いたい場合、そのままではWarningが出てしまうことだ。これを避けるには例えば以下の記述としなければいけない。}Stackoverflowでの議論これについてもStackoverflowでの議論を発見した。variable?おおよそは前述した通りのことだが、しかしここには回答者からの警告もある。pattern(奇妙に再帰したパターン)と呼ばれ、「本質的に安全ではない」という。内部APIのみに使うべきであり、外部に公開するものには使わない方が良いそうだ。詳細は説明を参照して欲しい。非常に価値のあるパターンであり、回答者自身もフルーエントインターフェースを作るために仕事に使っていると認めている。これも、詳細は説明を参照して欲しい。製品版としたjarファイル内のクラスがある条件を満たしているかを調べたい。...Javaジェネリクス:型パラメータの関連性を保ったままマップに保持する正式にはどのような呼称になるのかわからないのだが、以下のような状況がある。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。