アカウント名:
パスワード:
これってC++で言うところのTemplateと同じものと考えてOK? それとも違う?
違います。 C++のテンプレートってのは「型紙」で、パラメータを与えることでコンパイル時にコードを展開(インスタンス化)する。別の型をパラメータに与えて使う場合はその型用のコードがインスタンス化される。基本的には文字列操作(マクロ展開)のようなイメージ。 Javaのgeneric typeは、パラメータ型ごとにインスタンス化されるわけではない。生成されるコードは1つだけ。 生成されるバイトコードで実行時に型チェックをするコードが含められたりするわけではないの
下の方に投稿したこの記事 [srad.jp]に関連ポインタを書いときましたので参考にしてください。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
※ただしPHPを除く -- あるAdmin
generic type (スコア:0)
これってC++で言うところのTemplateと同じものと考えてOK?
それとも違う?教えて、エライ人。
Re:generic type (スコア:1, 参考になる)
違います。
C++のテンプレートってのは「型紙」で、パラメータを与えることでコンパイル時にコードを展開(インスタンス化)する。別の型をパラメータに与えて使う場合はその型用のコードがインスタンス化される。基本的には文字列操作(マクロ展開)のようなイメージ。
Javaのgeneric typeは、パラメータ型ごとにインスタンス化されるわけではない。生成されるコードは1つだけ。 生成されるバイトコードで実行時に型チェックをするコードが含められたりするわけではないの
Re:generic type (スコア:0)
と考えてオーケー?
templateじゃなくてgeneric typeを使った際の利点はなんでしょうか?
#スマン、オイラバカなんで。もう少しわかりやすく説明して頂けると・・・。
Re:generic type (スコア:1, 参考になる)
List list = new ArrayList();
String text = (String) list.get(i);
がgeneric typeの導入によって
List<String> list = new ArrayList<String>();
String text = list.get(i);
になる。この場合のメリットは
あと<>(本当は半角)の中も合わせて型チェックされることになるのでキャストは厳しくなる。
List list1 = new ArrayList();
List<String> list2 = (List<String>) list1;
はだめ、
List<Object> list1 = new ArrayList<Object>();
List<String> list2 = (List<String>) list1;
はOK。
Re:generic type (スコア:0)
> List<String> list2 = (List<String>) list1;
> はOK。
ダウト(Object と String を入れ替えても)
Re:generic type (スコア:1)
下の方に投稿したこの記事 [srad.jp]に関連ポインタを書いときましたので参考にしてください。