Records и Дженерики
27 вопросов и ответов в разделе Records и Дженерики.
Вопросы этого раздела
- Что такое Record в Java и с какой версии они доступны
- В чём основные отличия Record от обычного класса
- Можно ли наследоваться от Record или наследовать Record от другого класса
- Можно ли добавлять дополнительные методы в Record
- Какие методы автоматически генерируются для Record
- Можно ли переопределить конструктор в Record
- Что такое компактный конструктор (compact constructor) в Record
- Можно ли объявлять статические поля и методы в Record
- Являются ли поля Record финальными
- Можно ли использовать Record как ключ в HashMap
- Что такое дженерики (Generics) в Java
- В чём преимущества использования дженериков
- Что такое type erasure (стирание типов)
- Можно ли создать массив дженерик-типа
- Что такое bounded type parameters
- В чём разница между <? extends T> и <? super T>?
- Что такое PECS (Producer Extends Consumer Super)
- Можно ли использовать примитивные типы как параметры дженериков
- Что такое raw types и почему их следует избегать
- Что произойдёт при попытке создать экземпляр дженерик-типа через new T()
- [В чём разница между List<?> и List
- Можно ли перегружать методы, отличающиеся только дженерик-параметрами?
- Что такое recursive type bound
- Как работают дженерики с наследованием
- Что такое bridge methods и зачем они нужны
- Можно ли использовать несколько ограничений (bounds) для одного параметра типа?
- Как реализовать шаблон Singleton с помощью Record
Навигатор по разделу
27 вопросов для подготовки к собеседованию на Middle Java Developer.
📋 Все вопросы
🗺️ Карта зависимостей тем
┌──────────────────────────────────────────┐
│ RECORDS (1-10) │
│ 1. Что такое Record (Java 16) │
│ 2. Record vs обычный класс │
│ 3. Наследование (нельзя) │
│ 4. Дополнительные методы │
│ 5. Автогенерация методов │
│ 6. Конструкторы │
│ 7. Compact constructor │
│ 8. Static поля и методы │
│ 9. Final поля │
│ 10. Record как ключ HashMap │
└──────────────────┬───────────────────────┘
│
┌──────────────────────────┼──────────────────────────┐
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌────────────────────┐
│ GENERICS │ │ WILDCARDS │ │ ADVANCED │
│ BASICS │ │ И ERASURE │ │ GENERICS │
│ (11-12, 18) │ │ (13-14, 19-21) │ │ (22-26) │
│ 11. Generics │ │ 13. Erasure │ │ 22. Overloading │
│ 12. Преимущества│ │ 14. Generic │ │ 23. Recursive bound│
│ 18. Primitives │ │ arrays │ │ 24. Наследование │
│ │ │ 19. Raw types │ │ 25. Bridge methods │
│ │ │ 20. new T() │ │ 26. Multiple bounds│
│ │ │ 21. List<?> vs │ │ │
│ │ │ List<Obj> │ │ │
└───────┬───────┘ └───────┬───────┘ └────────┬───────────┘
│ │ │
└────────────────────────┼────────────────────────┘
▼
┌──────────────────────────────────────────┐
│ PATTERNS (15-17, 27) │
│ 15. Bounded type parameters │
│ 16. extends T vs super T │
│ 17. PECS │
│ 27. Singleton with Record │
└──────────────────────────────────────────┘
🎯 Рекомендуемый порядок изучения
🟢 Уровень Junior (недели 1-2)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | Records база | Q1-Q3 | Что такое Record, отличия от класса, нельзя наследовать |
| 2 | Record методы | Q4, Q5, Q8, Q9 | Доп. методы, автогенерация, static, final |
| 3 | Generics база | Q11, Q12 | Что такое generics, зачем нужны |
| 4 | Primitives | Q18 | Autoboxing overhead, почему нельзя примитивы |
🟡 Уровень Middle (недели 3-4)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | Record конструкторы | Q6, Q7 | Переопределение, compact constructor |
| 2 | Record + HashMap | Q10 | Почему Record идеальны как ключи |
| 3 | Type Erasure | Q13, Q14 | Как работает стирание, массивы generics |
| 4 | Bounded types | Q15, Q19 | Ограничения типов, raw types |
| 5 | Wildcards | Q21, Q20 | List<?> vs List |
🔴 Уровень Senior (недели 5-6)
| Шаг | Тема | Файлы | Цель |
|---|---|---|---|
| 1 | PECS | Q16, Q17 | Producer Extends, Consumer Super |
| 2 | Overloading | Q22 | Нельзя перегрузить по generics |
| 3 | Recursive bounds | Q23 | Comparable<? super T>, CRTP |
| 4 | Inheritance + Generics | Q24 | Covariant returns, generics invariance |
| 5 | Bridge methods | Q25 | Зачем нужны, как генерируются |
| 6 | Multiple bounds | Q26 | Intersection types, erasure первого bound |
🔗 Ключевые связи между темами
Тема: Records
Q1 (Record) → Q2 (vs обычный класс) → Q3 (наследование)
↓
Q4 (Доп. методы) → Q5 (Автогенерация) → Q6 (Конструкторы) → Q7 (Compact)
↓
Q8 (Static) → Q9 (Final) → Q10 (HashMap key)
Тема: Generics Basics
Q11 (Generics) → Q12 (Преимущества) → Q18 (Primitives)
Тема: Erasure и Wildcards
Q13 (Type Erasure) → Q14 (Generic arrays) → Q19 (Raw types) → Q20 (new T()) → Q21 (List<?> vs List<Object>)
Тема: PECS
Q15 (Bounded types) → Q16 (extends vs super) → Q17 (PECS)
Тема: Advanced
Q22 (Overloading) → Q23 (Recursive bound) → Q24 (Наследование) → Q25 (Bridge methods) → Q26 (Multiple bounds)
🎓 Шпаргалка: что знать для каждого уровня
🟢 Junior
- Record = immutable data class, Java 16+
- Автоматически: конструктор, аксессоры, equals/hashCode/toString
- Нельзя наследовать, нельзя instance поля (только static)
- Generics = параметризация типов, compile-time type safety
- Примитивы нельзя в generics — autoboxing в обёртки
🟡 Middle
- Compact constructor: без сигнатуры, только валидация
- Type erasure: generics существуют только на compile-time, runtime = Object
- Raw types — backwards compatibility, но unchecked warnings
<? extends T>= read-only (producer),<? super T>= write (consumer)new T()невозможен — type variable не имеет конструктора
🔴 Senior
- PECS: Producer Extends, Consumer Super
- Bridge methods: компилятор генерирует для covariant returns после erasure
- Multiple bounds:
<T extends A & B>— erasure по первому bound - Generic arrays невозможны — heap pollution risk
- List
НЕ подтип List — generics инвариантны - Recursive bound:
T extends Comparable<? super T>для наследуемого compareTo
📝 Формат каждого файла
Каждый файл содержит:
- 🟢 Junior Level — базовое понимание, простые аналогии, примеры
- 🟡 Middle Level — внутренности, типичные ошибки, практические примеры
- 🔴 Senior Level — deep dive, edge cases, production experience, monitoring
- 🎯 Шпаргалка для интервью — ключевые тезисы, частые вопросы, красные флаги, связанные темы