第42章 Java泛型 - 章节测试

测试你对Java泛型的掌握程度

测试说明

本测试包含10道选择题,涵盖Java泛型的核心概念,包括泛型类、泛型方法、通配符、有界类型参数、类型擦除和PECS原则等知识点。

10
题目数量
15
预计时间(分钟)
70
及格分数
1
泛型的主要优势
以下哪个不是Java泛型的主要优势?

解析

正确答案是D。由于类型擦除机制,Java泛型在运行时会丢失类型信息,而不是增加运行时类型信息。泛型的主要优势包括编译时类型安全、消除类型转换、提高代码重用性等。

2
泛型类定义
以下哪个是正确的泛型类定义?

解析

正确答案是A。泛型类的类型参数应该在类名后面用尖括号声明,格式为:class ClassName<TypeParameter>

3
泛型方法
以下哪个是正确的泛型方法定义?
public static _____ void swap(T[] array, int i, int j) { T temp = array[i]; array[i] = array[j]; array[j] = temp; }

解析

正确答案是A。泛型方法的类型参数必须在返回类型前用尖括号声明,格式为:<TypeParameter> ReturnType methodName(...)

4
通配符类型
根据PECS原则,以下哪个声明适合用于只读取数据的方法参数?

解析

正确答案是B。PECS原则:Producer Extends, Consumer Super。当方法只读取数据时(生产者),应使用? extends T上界通配符。

5
有界类型参数
以下哪个有界类型参数的声明是正确的?

解析

正确答案是A。多重边界使用&符号连接,格式为:<T extends Class & Interface1 & Interface2>。类必须在接口之前。

6
类型擦除
由于类型擦除,以下哪个操作在Java中是不允许的?

解析

正确答案是B。由于类型擦除,运行时无法确定T的具体类型,因此不能创建泛型数组new T[10]。这会导致编译错误。

7
通配符使用场景
以下哪个方法签名适合用于向集合中添加元素?

解析

正确答案是B。根据PECS原则,当需要向集合中写入数据时(消费者),应使用? super T下界通配符。这样可以安全地添加Integer及其子类型。

8
泛型和原始类型
以下代码的运行结果是什么?
List<String> stringList = new ArrayList<>(); List<Integer> integerList = new ArrayList<>(); System.out.println(stringList.getClass() == integerList.getClass());

解析

正确答案是A。由于类型擦除,运行时两个List的Class对象都是ArrayList.class,所以比较结果为true。泛型信息在运行时被擦除。

9
泛型继承
以下关于泛型继承的说法,哪个是正确的?

解析

正确答案是C。泛型是不变的(invariant),即使String是Object的子类,List<String>List<Object>之间也没有继承关系。这是为了保证类型安全。

10
泛型最佳实践
以下哪个是泛型使用的最佳实践?

解析

正确答案是C。泛型的最佳实践包括:优先使用泛型而不是原始类型、不要忽略编译器警告、遵循PECS原则、使用有界类型参数等。

测试完成!

0%

0

答对题数

0

答错题数

0%

得分率