メソッドの総称型では仮型引数を別の総称型の型引数にもマッチしてくれる のを知ったので、JavaCompilerの実験のcompile()メソッドを修正。
でもloadClass()の戻り値をClass<T>へキャストする際に警告が出るので、@SuppressWarnings("unchecked")によって警告を抑制。
(ついでにEclipseの警告の種類もメモに追記)
でもこれってやっぱり危険だなー。
実体がClass<String>だったとしても、Class<Date>の変数に代入できちゃう(コンパイルエラーも実行時の例外発生も無い)。
でもDateのつもりでDate d=clazz.newInstance();とかやったら、(Stringのインスタンスが生成されるから)キャストできなくて例外が発生する。
つまり本来ならClass<T>へのキャスト時点で例外が発生すべきなのに、だからコンパイル時点で警告が出てるのに それを抑制しちゃってるわけだからなぁ…。
でも「T であること」をチェックする方法なんて、あるのかな?
※コメント投稿者のブログIDはブログ作成者のみに通知されます