ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

getClass()の不思議

2008-08-10 19:56:19 | PG(Java)

Object#getClass()の戻り値を変数に入れる際、変数の型は何にすればいいか?

「Type obj」に対して「Class c = obj.getClass()」でいけるんだけど、JDK1.5以上ならジェネリクスの型情報が無いのは寂しい。
でも「Class<Type> c = obj.getClass()」はダメなんだよね。
「Class<Type> c = (Class<Type>)obj.getClass()」という風にキャストしてやれば動作はするが、コンパイル時に警告が出る。
で、正解は「Class<? extends Type> c = obj.getClass()」。
これで「Type t = c.newInstance()」という書き方も問題なく出来る。
(Typeにデフォルトコンストラクターが無いと実行時に例外発生となるが、それはまた別のお話

で問題は、Object#getClass()の定義
JRE1.5と1.6で異なっているけれども、いずれにしてもそれと同じ定義を自分で行った場合、上記の“正解”のようなコーディングは出来ない。
うーん、RuntimeExceptionと同じような、言語仕様上の特別扱いなんだろうか。
(RuntimeExceptionの派生クラスは、throwsに書くのを省略できる)



最新の画像もっと見る

コメントを投稿