У меня есть параметризованный общий класс X, который принимает тип T. На котором не было определено никаких условий (например, T extends/tools).Autoboxing не работает с параметризованными типами
class X <T> {
Map<T, String> map = new HashMap<T, String>();
public void put() {
map.put((T)getLong(), "");
}
public long getLong() {
return 0L;
}
}
Мы знаем, что T определенно является типом объекта, а не примитивным. Поэтому я ожидал бы, что возвращаемое «длинное» значение будет «Автобокс» до «Лонг», после чего последует приведение к Т, но этого не произойдет.
Компилятор говорит: «Невозможно отложить от длинного до Т». Если заменить параметризованный тип T на «Long», проблем нет. Может ли кто-нибудь объяснить, почему Java не поддерживает autoboxing примитивных типов при использовании параметризованного типа? Есть что-то, чего я не хватает?
Спасибо!
Предполагая, что все вышеперечисленное будет работать только с Long, как T. Вы получите «ClassCastException» для любой другой параметризации. Итак, что вы пытаетесь выполнить с помощью Generics? –
Спасибо за ответ. К сожалению, да, здесь мы можем предположить, что T и Long являются совместимыми типами. Не очень беспокоиться о запуске ClassCastException, но ошибка компиляции, которая ползет. –
Если вы добавили '', это может сработать. –