Eclipse 3.2.1
論文締め切り間近。書くたびにはてな記法を思い出せない…
Eclipseのバージョンあげたら論文に使うプログラムが動かなくなりました。
@3.2.0 <T> void t(T obj) { obj.getClass(); // -> Class<T> }
@3.2.1 <T> void t(T obj) { obj.getClass(); // -> Class<? extends Object> }
3.2.1からJava APIに従うようになった模様で、Object#getClass()の戻り値がClass< ? extends X>(ただしXはレシーバオブジェクトの型にイレイジャ変換をかけたもの)になった模様。
確かに
なにがしたかったかというと、
class Hoge<E extends Foo> { Map<E, E> map; ... <T extends E> T t(T obj) { // 同値オブジェクトの正規化 E normalized = map.get(obj); return obj.getClass().cast(normalized); } }
3.2.0までは「obj.getClass()」がClass
まぁ、Tがraw型とは限らないので正しい動作なんですがね
結局↓
@SuppressWarnings("unchecked") <T extends E> T t(T obj) { E normalized = map.get(obj); return (T) normalized; }
さっさと終わりにしてIrenka書きたいのですよ…