Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?
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<R> supplier) { // 略 } まず単純に引数のMapと戻り値のMapを型変数PとRにとるようにしてみよう。 JavaのジェネリクスはC#のようなnew制約をつけれないのでメソッド内部でインスタンス生成する場合はj
Javaのジェネリクスで,型パラメータ T のインスタンスが欲しくなったことはあるだろうか? 昨今のオブジェクト指向プログラミングにおいて,ジェネリクスは必須の基本文法だ。 扱う対象のクラスが抽象化されて汎用的になりつつ,なおかつ型安全性が確保される。 そのおかげで,処理の重複や分岐をコーディングする必要が無くなり,コード量が驚異的に削減される。 そういう基本的な原則を踏まえると, 「型パラメータのインスタンスが欲しい」 というシチュエーションは,Javaのジェネリクスの本来の導入目的に真っ向から逆らう。 なぜなら,ジェネリクスは型を抽象化して透過的に扱えるようにするための機構なのだから, せっかく抽象化した物をわざわざ具体化してどうするというお怒りを生む事になるのだ。 頑張って詳細なクラス情報を「T」でパラメータ化して具体性を隠ぺいしたにも関らず, その T に対して .class で具
高階関数というものをご存知か。関数自身を引数あるいは戻り値に取る関数のことである。「高階」は「こうかい」と読む。その昔「たかしな」と読んだ人がいたとか、いないとか。 先のエントリ「HttpSessionを型安全にする」では「javax.servlet.http.HttpSessionのsetAttribute()/getAttribute()のようなモノをどうやって型安全にするか」という動機付けから、 public class KeyValue<K> { public <T> void put(K<T> key, T value){} } といったことをやろうとして、Javaの言語仕様上、型変数に型変数を持たせることができないので実現できないと述べた。 簡単に解説すると、ここでKayValueはHashMap的なキーを渡せば値を返すオブジェクトで、型変数Kはキーの集合体を表現している。ty
ジェネリクスでは、「型」を変数にした「型変数」というものを取り扱う。型変数で何が嬉しいかというと、メジャーな例ではコレクションAPIが挙げられる。java.util.Listとかjava.util.Mapとかのデータを格納するタイプのユーティリティクラスのことだ。 2004年にJavaのバージョンが5.0となるまでは、Javaにはジェネリクスの機能はなかった。なので、Listにデータを格納し、取得する場合は List list = new ArrayList(); list.add("hello!"); String str = (String) list.get(0); といったソースコードになる。 add()の引数はObject型で宣言されており、どんな参照型でもadd()することができた。 get()の戻り値もObject型で宣言されておりキャストが必要だった。このキャストはプログラ
タグ Windows / インストール / Linux / 設定 / エラー / Java / Eclipse / AutoHotkey / TeX / C# / VisualStudio2008 / 対策 / Subversion / LaTeX / Vista / 方法 / CentOS / Android / Microsoft / Windows7 / Office / バージョン管理 / プログラミング / eclipse / PowerPoint / SSH / Ubuntu / WindowsVista / コマンド / ショートカット / .NET / Desire / VisualStudio / 便利 / P2P / Unix /
This is a collection of answers to frequently asked questions (FAQs) about Java Generics, a new language feature added to the Java programming language in version 5.0 of the Java Standard Edition (J2SE 5.0). If you want to provide feedback or have any questions regarding Java generics, to which you cannot find an answer in this document, feel free to send me EMAIL or use the GENERICS FAQ form. A p
型パラメータつきクラスHoeがあるとして、指定された型パラメータをHoeクラスの中から知る方法。 public class Hoe<E> { private Class<E> type; public Hoe(E... e) { @SuppressWarnings("unchecked") Class<E> type = (Class<E>) e.getClass().getComponentType(); this.type = type; } public Class<E> getType() { return type; } } こうすると、具体的な型パラメータを取得できる。 例えば Hoe<Fuga> hoe = new Hoe<Fuga>(); という文があった場合、hoe.getType()はFuga.classになる。 かなり裏技的だけど。
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く