あなたが書いたコードでは、Tは何にもバインドされていません。Javaは、メソッドを呼び出すたびにTに型を割り当て、get
返されると予想される型を調べます...しかし、これは、待機している型を明示的に宣言した場合にのみ機能するようです。次の例を見てください。
public static void jump(String a) {
}
public static <T> T get() {
return (T) null;
}
public static void main(String[] args) {
//This works quite well, generic parameter T is inferred to be String
String blah = get();
jump(blah);
}
一方で
public static void jump(String a) {
}
public static <T> T get() {
return (T) null;
}
public static void main(String[] args) {
//This doesn't work, Java does not bind T to anything hence Object is used... and no jump for object is found
jump(get());
}
少なくとも、これがJava6での動作方法です。