Generics в Java
При создании списка назовите тип элементов внутри угловых скобок. В Bin.java оставьте public-класс Bin, добавьте import java.util.ArrayList;, создайте ArrayList<String> names = new ArrayList<>();, добавьте "oak" и напечатайте names.get(0). Скомпилируйте через javac Bin.java и запустите java Bin. Экран должен показать oak. Второе демо тем же способом хранит значение Integer равное 3. Опциональную Lambda оставьте для следующей страницы. Этот урок — типизированные списки с Generics, а не аргументы командной строки args и не мини-проект со Scanner.
Список String с type argument
Откройте Bin.java. Оставьте имя public-класса Bin. Удалите оставшиеся демо Program Arguments с Flag, оставшиеся подсказки Scanner в Box, оставшиеся печати Compiling из Build и историю коллекций из Shelf, если они заслоняют тему Generics. Программа не должна ждать ввод и не должна читать args.
Добавьте import вверху:
import java.util.ArrayList;
Внутри Bin.main создайте список, элементы которого — String:
ArrayList<String> names = new ArrayList<>();
Угловые скобки после ArrayList держат type argument String. Пустые <> у new — это diamond: Java подставляет тот же тип слева. Затем сохраните одно слово и напечатайте по индексу:
names.add("oak");
System.out.println(names.get(0));
get(0) возвращает String, потому что список объявлен с String. Экран показывает oak.
import java.util.ArrayList;
public class Bin {
public static void main(String[] args) {
ArrayList<String> names = new ArrayList<>();
names.add("oak");
System.out.println(names.get(0));
}
}
Из папки, где лежит Bin.java, выполните javac Bin.java. Когда скобки и точки с запятой сходятся, javac сам ничего не печатает. Затем java Bin — не java Bin.java. Оставьте один public-класс, чтобы имя совпадало с Bin.
Пройдите запуск один раз. Java стартует в Bin.main. Список типизирован для String. add сохраняет "oak". get(0) возвращает это слово. println пишет oak. Ничто не печатает args[0] из Flag. Ничто не ждёт на item:. Ничто не печатает [oak, pine], если вы не запускаете старый файл Shelf.
Произнесите правило новичка, глядя на экран: угловые скобки называют тип элемента; diamond повторяет его в new; get возвращает этот тип. Не придумывайте демо Lambda на этой странице. Lambda ждёт следующего опционального урока. Не оставляйте список raw как ArrayList names без type argument в этом учебном файле.
Если вы всё ещё видите oak от java Flag oak, это были аргументы программы. Здесь oak — элемент списка, а команда запуска — только java Bin. Если javac не находит ArrayList, проверьте строку import.
Список Integer с той же привычкой
Generics не только для слов. Оставьте тот же public-класс Bin. Постройте список значений Integer:
ArrayList<Integer> nums = new ArrayList<>();
nums.add(3);
System.out.println(nums.get(0));
Снова скомпилируйте через javac Bin.java и запустите java Bin. Экран показывает 3. Type argument — Integer, потому что ArrayList хранит объекты, а Integer — объектная форма целых чисел в этой начальной форме. Diamond по-прежнему копирует тип с левой стороны.
import java.util.ArrayList;
public class Bin {
public static void main(String[] args) {
ArrayList<Integer> nums = new ArrayList<>();
nums.add(3);
System.out.println(nums.get(0));
}
}
Пройдите запуск один раз. Список типизирован для Integer. add(3) сохраняет значение. get(0) возвращает его. println пишет 3. Держите два демо как две учебные формы. Сначала докажите список String. Затем докажите список Integer. Обе формы делят import, diamond, add и get(0).
Если вы напишете ArrayList<String> и затем add(3), javac отвергнет несовпадение. Если напишете ArrayList<Integer> и затем add("oak"), javac отвергнет и это несовпадение. Type argument — контракт того, что держит список.
Привычки типизированного списка
Держите type argument и diamond вместе, пока практикуетесь.
📊 Привычки Generics для Bin
| Привычка | Типизированная форма | Проверка новичка |
|---|---|---|
| Объявление | ArrayList<String> names |
угловые скобки называют тип элемента |
| Создание | new ArrayList<>() |
diamond копирует тип слева |
| Сохранить String | names.add("oak") |
значение совпадает с String |
| Сохранить Integer | nums.add(3) |
значение совпадает с Integer |
| Чтение | get(0) |
возвращает объявленный тип элемента |
Generics — не Flag и не Lambda
Program Arguments заполняли String[] args из командной строки запуска. Generics называет тип элемента коллекции, которую вы строите в коде. Lambda позже сократит некоторые формы вызовов — на следующей опциональной странице. Сегодня не смешивайте эти три работы в одном начальном файле.
oak в Bin — сохранённое значение списка. oak после java Flag был аргументом. Одно написание, разная работа. Когда оставшийся файл Flag всё ещё требует слова в командной строке, оставьте его как историю и запускайте java Bin без лишних слов.
Без type argument raw-список теряет ясный контракт, который учит эта страница. В демо, которые оставляете, держите ArrayList<String> или ArrayList<Integer>. Синтаксис Lambda держите вне этой страницы до того урока.
Проверка папки перед Lambda
После успешной компиляции перечислите папку. Должны быть вместе Bin.java и Bin.class. Отредактируйте источник, сохраните, выполните javac Bin.java, затем java Bin. Устаревший .class может показать старую печать, если пропустить компиляцию после правки.
Если javac жалуется на дублирующий public-класс, оставьте public только у Bin. Если экран показывает [oak] вместо oak, вы напечатали весь список, а не get(0) — держите учебную печать как get(0). Если ничего не печатается, убедитесь, что main всё ещё вызывает println.
Не вставляйте в Bin циклы аргументов Flag. Не вставляйте в Bin подсказки Scanner из Box. Опциональная работа Generics — типизированные списки с ясным типом элемента.
Перед опциональной Lambda
Вы можете оставить public-класс Bin, import ArrayList, построить ArrayList<String> с diamond, добавить "oak", напечатать get(0) как oak, затем построить ArrayList<Integer>, добавить 3 и напечатать 3. Скомпилируйте через javac Bin.java и запустите java Bin. Таблица отделяет объявление, создание, сохранение и чтение. Следующая опциональная страница — Lambda.
Держите демо Bin для ясной пары Generics. При практике типизированных списков держите файлы Program Arguments с Flag вне этой страницы. При практике типизированных списков держите файлы Mini Project с Box вне этой страницы. Работу Lambda держите вне этой страницы до того урока. Эти привычки — контрольная точка перед продолжением. Когда демо String показывает oak или демо Integer показывает 3, Generics выполнил работу этого урока, и вы готовы к Lambda, если продолжите опциональный путь.
Последний проход по папке: один public Bin, import на месте, type argument в угловых скобках, diamond у new, согласованные значения add, печать get(0), без ожидания Scanner, без слов в командной строке. Ещё раз выполните javac Bin.java и java Bin на демо, которое держите открытым. Если экран всё ещё показывает oak или 3, форма Generics крепка, и курс может перейти к опциональной Lambda на следующей странице. На каждом проходе держите одну ясную привычку типизированного списка, чтобы каждый раз училась та же карта.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху