2011-02-16 6 views
1

Java5から提供されるGenericsに実行時の利点があるかどうかを知りたかったのです。私は、クラス/コレクションの型安全性を実現し、ジェネリックのためのさまざまなオブジェクトを可能にすることができることを知っていますが、コンパイル時より前に実行時に得られるメリットはありますか?Java Generics - 任意の実行時の利点

+1

「コンパイル時間よりも前にランタイムで取得する」とはどういう意味ですか?最初にコンパイルせずにどのように実行しますか? – CoolBeans

+2

まあ、ランタイムのメリットは少ないです。ClassCastExceptions – samitgaur

+0

ClassCastの例外の数が実際にはランタイムのメリットは少なくなります。コードが正しければ、どうにもなりません。利点は、正しいコードを書く方が簡単だということです。 – paulmurray

答えて

10

のJavaのジェネリックはerasureを経由して、実行時に削除されるので、パフォーマンスは同一である必要があります。

1

それらに関するいくつかの情報は(http://download.oracle.com/javase/6/docs/api/java/lang/reflect/Constructor.html#getTypeParameters%28%29で言う)反射によって提供されていますが、彼らはあなたのプログラムがより良い実行しないでください。

CoolBeans、私はコンパイル時間のメリット「を超えて」を意味するために彼を連れて行きました。

+0

入手しました。説明をありがとう。 – CoolBeans

0

はい - それは非常に小さいです。

ジェネリックを使用する場合は、instanceofを使用してどこにでもキャストする必要はないため、これらの命令のタイプチェックを行うバイトコード命令は生成されません。欠点は、コンパイルせずに古いバージョンのクラスにリンクすれば、実行時にかなり低レベルのエラーが発生することです。あなたが頻繁にそうでない場合は、キャストを必要とするタイトなループを使用している場合

はまだ、私はジェネリックは小さな、小さなビットを、物事をスピードアップする可能性があるとします。しかし、パフォーマンスの向上は、それらの使用のポイントではありません。

+1

ほとんどのキャスト命令はコンパイラによって生成されますが、実際にジェネリックスを使わずにプログラムを書いたときには、instanceofテストも必要ありません。 –

関連する問題