正在加载...

Java 中的 Generics

构建列表时,在尖括号里写明元素类型。在 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 列表

打开 Bin.java。保留 public 类名 Bin。若挡住 Generics 主线,删掉残留的 Program Arguments Flag 演示、Box 里残留的 Scanner 提示、Build 的编译输出,以及 Shelf 的集合历史。程序不能等待键盘输入,也不能读取 args。
在文件顶部添加 import:
import java.util.ArrayList;
在 Bin.main 里创建元素为 String 的列表:
ArrayList<String> names = new ArrayList<>();
ArrayList 后面的尖括号存放类型参数 String。new 一侧的空 <> 是 diamond — Java 从左侧填入同一类型。然后存一个词并按索引打印:
names.add("oak");
System.out.println(names.get(0));
get(0) 返回 String,因为列表用 String 声明。屏幕显示 oak。

Bin ArrayList String prints oak

java
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。不会打印 Flag 的 args[0]。不会在 item: 等待。除非你仍运行旧的 Shelf 文件,否则不会打印 [oak, pine]。
看着屏幕说出初学者规则:尖括号命名元素类型;diamond 在 new 上重复;get 返回该类型。不要在本页发明 Lambda 演示。Lambda 等下一节可选课。不要在本教学文件里把列表留成无类型参数的 raw ArrayList names。
若你仍从 java Flag oak 看到 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。类型参数是 Integer,因为 ArrayList 存对象,而在本初学者形态里整数的对象形式是 Integer。diamond 仍从左侧复制类型。

Bin ArrayList Integer prints 3

java
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 也会拒绝。类型参数约定列表里放什么。

类型化列表习惯

练习时把类型参数和 diamond 放在一起。

📊 Bin 的 Generics 习惯

习惯 类型化形态 初学者检查
声明 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 会在后面可选页缩短某些调用形态。今天不要把这三件事混在一个初学者文件里。
Bin 里的 oak 是存入列表的值。java Flag 之后的 oak 是参数。拼写相同,职责不同。若残留的 Flag 文件仍要在命令行加词,把它当历史,运行 java Bin 时不再加词。
没有类型参数时,raw 列表会失去本页教的清晰约定。保留的演示里用 ArrayList<String> 或 ArrayList<Integer>。在该课之前别把 Lambda 语法放进本页。

Lambda 前的文件夹检查

编译成功后列出文件夹。应同时看到 Bin.java 和 Bin.class。编辑源码、保存、运行 javac Bin.java,再 java Bin。若编辑后跳过编译,过期的 .class 可能显示旧输出。
若 javac 抱怨重复的 public 类,只保留 Bin 为 public。若屏幕显示 [oak] 而不是 oak,你打印了整个列表而非 get(0) — 教学输出应保持 get(0)。若无输出,确认 main 仍调用 println。
别把 Flag 参数循环贴进 Bin。别把 Box 的 Scanner 提示贴进 Bin。可选的 Generics 作业就是元素类型清晰的类型化列表。

可选 Lambda 之前

你可以保留 public 类 Bin、import ArrayList、用 diamond 构建 ArrayList<String>、添加 "oak"、用 get(0) 打印 oak,再构建 ArrayList<Integer>、添加 3、打印 3。用 javac Bin.java 编译并运行 java Bin。表格区分声明、创建、存储和读取。下一可选页是 Lambda。
为清晰的 Generics 对子保留 Bin 演示。练习类型化列表时,别把带 Flag 的 Program Arguments 文件放在本页。练习类型化列表时,别把带 Box 的 Mini Project 文件放在本页。在该课之前别把 Lambda 工作放在本页。这些习惯是继续前的检查点。当 String 演示显示 oak 或 Integer 演示显示 3 时,Generics 完成了本课任务;若你走可选路径,已准备好 Lambda。
最后在文件夹过一遍:一个 public Bin、import 在位、尖括号里有类型参数、new 上有 diamond、add 值匹配、打印 get(0)、无 Scanner 等待、启动命令行不需额外词。在你打开的演示上再运行一次 javac Bin.java 和 java Bin。若屏幕仍显示 oak 或 3,Generics 形态稳固,课程可进入下一页可选 Lambda。每次阅读保持一种清晰的类型化列表习惯,让每一遍都教同一张图。

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
5
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部