模块 6 · 第 2 课(共 2)课程中的12/14~15 min
模块课程(2/2)
Java 中的泛型
Java 中引入了泛型(泛型类型),以允许类、接口和方法将不同类型作为参数进行操作。这确保了编译时类型安全并避免运行时昂贵的显式转换。
通用类
泛型类使用尖括号 <T> 定义,其中 T 充当实例化类时指定的类型的占位符。
Java
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}创建 Box 对象时,我们指定实际类型:
Java
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!通用方法
您可以定义一个可以接受不同类型参数的泛型方法。类型参数放置在方法的返回类型之前。
Java
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}通配符和有界类型
我们可以使用 extends 关键字(上限)来限制泛型接受的类型,以接受特定类型或其子类。
Java
public static <T extends Number> void processNumber(T number) {
// Accepts Integer, Double, Float, etc.
System.out.println(number.doubleValue());
}自己尝试一下
锻炼#java.m6.l2.e1
尝试:0加载中...
通过定义返回 T 的 getter getValue() 和设置私有变量值的 setValue(T value) 来完成泛型类 Box。
正在加载编辑器...
显示提示
使用泛型类型参数“T”编写具有正确签名的方法。
3 次尝试后可用的解决方案
锻炼#java.m6.l2.e2
尝试:0加载中...
创建一个静态泛型方法 printArray,它采用名为 array 的类型 T[] 的数组,并使用 for-each 循环打印每个元素。
正在加载编辑器...
显示提示
类型参数“<T>”必须紧邻“static”之后、返回类型“void”之前。
3 次尝试后可用的解决方案
锻炼#java.m6.l2.e3
尝试:0加载中...
创建一个静态类 StringContainer,它实现用 String 参数化的 Container 接口。定义一个采用 String 参数的构造函数并实现 getItem() 方法。
正在加载编辑器...
显示提示
在类签名和“getItem()”的返回类型中将泛型类型“T”替换为“String”。
3 次尝试后可用的解决方案