Представьте, что нужно описать конечный набор типизированных значений. Почему Java не разрешает объявлять обобщённый enum?
База Hintsage
Программирование Java
Язык Java, JVM и экосистема серверной разработки.
Темы раздела
Выберите подраздел
- 3 вопроса
Общие вопросы
Смешанные вопросы по Java.
Открыть раздел - 50 вопросов
Java Core
Базовая семантика языка, типы, методы, классы и ключевые конструкции.
Открыть раздел - 50 вопросов
ООП и система типов
Наследование, полиморфизм, интерфейсы, классы и разрешение методов.
Открыть раздел - 50 вопросов
Коллекции
Java Collections Framework, контракты, реализации и сложность операций.
Открыть раздел - 50 вопросов
Многопоточность
Java Memory Model, потоки, синхронизация и java.util.concurrent.
Открыть раздел - 50 вопросов
JVM и память
Загрузка классов, память JVM, GC, JIT и диагностика.
Открыть раздел - 50 вопросов
Generics
Параметризация типов, bounds, wildcards и стирание типов.
Открыть раздел - 50 вопросов
Stream API
Функциональные интерфейсы, streams, collectors и параллельная обработка.
Открыть раздел - 50 вопросов
Исключения
Иерархия исключений, обработка ошибок и управление ресурсами.
Открыть раздел
Практика
Вопросы: Программирование Java
В API метод должен перемещать элементы между двумя коллекциями согласованного типа. Почему два независимых wildcard не выражают это требование, а общий параметр типа выражает?
Поясните асимметрию совместимости wildcard-параметризаций: почему коллекция Integer совместима с ожиданием коллекции неизвестного подтипа Number, но коллекция с неизвестным подтипом Number не совместима с ожиданием коллекции Integer?
Как трактуется параметр типа метода, если он носит то же имя, что и параметр окружающего обобщённого класса?
Что именно о параметризации обобщённого типа можно узнать через reflection после стирания типов, а что недоступно во время выполнения?
В каком случае рекурсивная верхняя граница параметра типа позволяет обобщённому API сохранить конкретный тип наследника при цепочке вызовов?
Разберите, почему компилятор отвергает точное описание типа коллекции через Class, хотя объект создан с параметром String:
import java.util.ArrayList;
class Demo {
static Class<?> runtimeType = new ArrayList<String>().getClass();
static Class<ArrayList<String>> preciseType = new ArrayList<String>().getClass();
}
Объясните механизм захвата wildcard, благодаря которому метод может безопасно переставлять элементы коллекции с неизвестным параметром типа.
За счёт чего целевой тип присваивания может влиять на вывод параметра типа обобщённого метода?
Как верхняя граница параметра типа влияет на его стирание и доступные операции внутри обобщённого кода?
Представьте параметр типа с несколькими верхними границами: почему граница-класс должна указываться первой?
Каким образом компилятор сохраняет переопределение обобщённого метода после стирания типов?
Объясните ограничение: почему статический член обобщённого класса не может напрямую использовать параметр типа этого класса?
В сравнении с наследованием самих типов почему параметризация Java остаётся инвариантной, даже когда один аргумент типа является подтипом другого?
Разберите, почему параметризованный varargs в Java может привести к загрязнению кучи даже при предупреждении компилятора.
Объясните, почему параметризованный класс нельзя сделать наследником Throwable в Java.
При проверке объекта через instanceof какие формы параметризованных типов Java разрешает использовать после стирания типов, а какие отвергает компилятор?
Какой риск возникает при передаче параметризованной коллекции в API, принимающий raw-тип?
Как компилятор обрабатывает неизвестный параметр типа коллекции, из которой разрешено читать, но нельзя добавлять произвольное значение?
Какую нижнюю границу wildcard выбрать, чтобы метод безопасно добавлял Integer в коллекцию Integer или его супертипа?
Показано 121–140 из 403