Целью пункта 29 (как я только что обсуждал в another answer) является демонстрация других видов использования дженериков и параметризованных типов в дополнение к коллекциям. Вся предыдущая глава по существу обсуждает параметризованные типы коллекций, поэтому Блох явно не отбрасывает Map
и Set
и другие параметризованные типы - он различает их от другого типа шаблона, который он называет «гетерогенным контейнером».
Сравните интерфейс, как:
interface Collection<E> {
void put(E element);
E get(int index);
}
что-то вроде:
interface HeterogeneousContainer {
<T> void put(Class<T> type, T instance);
<T> T get(Class<T> type);
}
Обратите внимание, что Collection
сам имеет параметр типа, в то время как HeterogeneousContainer
нет. Это различие, которое Блох пытается использовать в этом элементе - вы можете использовать параметры типа более мощными способами, чем просто создавать коллекции с типом безопасности.
Нет, он не отбрасывает. Перечитайте это. –
Все люди смертные. Сократ - человек. Поэтому Сократ смертен. // Контейнеры параметризуются. Наборы и карты - это контейнеры. Поэтому параметры и карты параметризуются? –
Спасибо @AndreyTyukin Sir – user961690