プログラマーの脳みそ[B!]新着記事・評価 - はてなブックマーク (original) (raw)

Javaのジェネリクスについて考察するのに丁度良いテーマを見つけたので忘れないうちに書いておく。 Map を Mapに変換するメソッドを作るという話題。 public static <K,V> Map<V,K> swap1(Map<K,V> origin) { // 略 } 単にMapからMapに変換するなら上記のようなメソッドシグネチャでよい。 ここで、Mapの具象型を帰すようにしたいとする。 public static <K,V, R extends Map<V,K>, P extends Map<K,V>> R swap2(P origin, Supplier supplier) { // 略 } まず単純に引数のMapと戻り値のMapを型変数PとRにとるようにしてみよう。 JavaのジェネリクスはC#のようなnew制約をつけれないのでメソッド内部でインスタンス生成する場合はj