タグ

javaとgenericsに関するlearnのブックマーク (4)

  • ジェネリック型引数を実行時型情報に残す方法がある - Qiita

    Javaのジェネリックは1.4以前のバイナリ仕様との互換のために、コンパイルの時点で型引数情報が消去され非ジェネリックプログラミングされたかのようなコードに変換されます。この変換を 型消去(イレイジャ) と呼びます。 型消去、通常のプログラミングにもたまに影響を与えます(例えば List.toArray() がなぜか引数として一見不要な E[] 型の配列オブジェクトを要求するなどします)が、何より影響を受けるのがリフレクションごりごりのフレームワークプログラミングやライブラリプログラミングにおいてです。型消去に伴って、実行時型情報からも型引数の部分が抜け落ちてしまいますから(そこだけは残しておいてくれれば良かったのに!)。 具体的にはどんなことになるかというと、たとえばみんな大好きEBean(うそ、僕が大好き)なら、エンティティクラスを指定して対応するDBテーブルからデータを取り出すのに

    ジェネリック型引数を実行時型情報に残す方法がある - Qiita
  • イレイジャではジェネリクスの何が消えるのか

    Javaのジェネリクスはコンパイル時に解決され、classファイルになった時にはジェネリクスの型情報は残されていません。そのためイレイジャ(型消去:type erasure)方式と呼ばれます。 と、ひとくちで言っても意味がよく分からないのでちょっと掘り下げてみましょう。 インスタンスからジェネリクスの型情報は拾えない リフレクションを用いたとしても、インスタンスからジェネリクス型パラメータが何であるかを取得することはできません。 List<String> stringList = new ArrayList<String>(); のような変数stringListがあったとして、ここから<String>を取得するということができないのです。これが消えてしまった部分。 この変数stringListに対する各種操作において、その型の安全はコンパイル時に精査され、 実行時にはあくまでObject型

  • ジェネリクスの基礎と応用 JJUG CCC 2012 Fall

    1. ジェネリクスの基礎と応用 Twetter : @nagise はてな : Nagise 所属  (株) Abby  java-ja  北陸エンジニアグループ 2. ジェネリクスのスコープ メソッドの中でのみ有効なジェネリクス public static <T> void hoge(T t) { … } インスタンスの中でのみ有効なジェネリク ス class Hoge<T> { Tt; ... }

    ジェネリクスの基礎と応用 JJUG CCC 2012 Fall
  • Javaの型パラメーターに対してstaticメソッドを呼び出した場合の挙動 - 達人プログラマーを目指して

    以前にJavaの配列関連で調べたことがあったのですが、Javaの総称型は型消去によって直感的でない挙動をする場合があります。 Java言語のClassクラスが持つちょっと不思議な性質について - 達人プログラマーを目指して Java5の型システムを理解するにはリフレクションAPIを使ってみるのが最短の近道になる - 達人プログラマーを目指して 特に、総称型の型パラメーターTについては以下はコンパイルできないという制約があります。 new T() new T[配列サイズ] catch (T ... extends T T.class instanceof T また、staticメソッドやstatic初期化ブロック内でクラスの型パラメータを使えないという制約もあります。 AngelikaLanger.com - Java Generics FAQs - Type Parameters - An

    Javaの型パラメーターに対してstaticメソッドを呼び出した場合の挙動 - 達人プログラマーを目指して
  • 1