タイプ T を取るパラメーター化された汎用クラス X があります。その条件 (T の拡張/実装など) は定義されていません。
class X <T> {
Map<T, String> map = new HashMap<T, String>();
public void put() {
map.put((T)getLong(), "");
}
public long getLong() {
return 0L;
}
}
T は間違いなくオブジェクト型であり、プリミティブではないことがわかっています。したがって、返された「長い」値が Long に Autoboxed され、その後 T へのキャストが続くことを期待していますが、それは起こりません。
コンパイラは、「long から T にキャストできません」と言っています。パラメータ化された型 T を "Long" に置き換えれば問題ありません。パラメータ化された型が関係しているときにJavaがプリミティブ型のオートボクシングをサポートしない理由を誰でも説明できますか? 私が欠けているものはありますか?
ありがとう!