回顾:泛型容器
本课属于 Coddy Java 学习旅程的“面向对象编程”单元。第 58 课,共 87 课。
挑战
简单让我们构建一个多功能存储系统,把你学过的泛型知识融会贯通!你将创建一个 Container 类,用来存储、获取和处理任意类型的元素,并添加实用方法来展示通配符的用法。
你将把代码分成三个文件:
Container.java:创建一个泛型类Container<T>来管理一组元素。容器应在内部使用ArrayList<T>存储元素。添加以下方法:add(T item)用于添加元素,get(int index)用于获取指定位置的元素,size()用于返回元素数量,isEmpty()用于检查容器是否为空。还要添加一个getAll()方法,用于返回内部列表。ContainerUtils.java:创建一个实用类,其中包含适用于你的容器的静态泛型方法:printAll(Container<?> container)- 使用无界通配符打印任意容器中的所有元素,每行一个。countItems(Container<? extends Number> container)- 使用上界通配符计算容器中所有数值的总和,并以double类型返回结果。addDefaults(Container<? super Integer> container)- 使用下界通配符,向任何能够存储整数的容器中添加整数 1、2 和 3。<T> T getLastOrDefault(Container<T> container, T defaultValue)- 一个泛型方法,用于返回容器中的最后一个元素;如果容器为空,则返回默认值。Main.java:整合你的泛型容器系统!你将接收三个输入:一个单词(String)、一个整数和一个 double。首先,创建一个
Container<String>,并将单词添加两次。打印String container:,然后使用printAll显示其中的内容。接下来,创建一个
Container<Double>,并将 double 值添加进去。打印一个空行,然后使用sumValues打印Number sum: [sum]。然后,创建一个
Container<Number>并对它调用addDefaults。打印一个空行,然后打印After adding defaults:,并使用printAll显示其中的内容。最后,创建一个空的
Container<Integer>,并将输入的整数作为默认值传给getLastOrDefault。打印一个空行,然后打印Last or default: [result]。
你将按顺序接收三个输入:一个单词(String)、一个整数和一个 double。
这个挑战综合运用了泛型类、泛型方法、有界类型参数以及三种通配符。注意每一部分的不同作用:泛型类提供类型安全的存储,有界通配符让读取和写入更加灵活,而泛型方法则能在不同容器类型之间提供可复用的操作!
亲手试试
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取输入
String word = scanner.nextLine();
int intValue = Integer.parseInt(scanner.nextLine());
double doubleValue = Double.parseDouble(scanner.nextLine());
// TODO:创建一个 Container<String>,并将 word 添加两次
// 先打印 "String container:",再使用 ContainerUtils.printAll()
// TODO:创建一个 Container<Double>,并添加 double 值
// 先打印一个空行,再使用 ContainerUtils.countItems() 打印 "Number sum: [sum]"
// TODO:创建一个 Container<Number>,并对它调用 ContainerUtils.addDefaults()
// 先打印一个空行,再打印 "After adding defaults:",然后使用 ContainerUtils.printAll()
// TODO:创建一个空的 Container<Integer>
// 以 intValue 为默认值,使用 ContainerUtils.getLastOrDefault()
// 先打印一个空行,再打印 "Last or default: [result]"
}
}
面向对象编程中的所有课
自己练习: Java 在线编译器