全部学科
Python全栈
python
NodeJS全栈
nodejs

JAVA泛型详解专题测试

20 题 60 分钟 难度:★★

考察知识点

知识点模块题目数量题目编号
泛型类基础3道Q001-Q003
泛型接口实现2道Q005-Q006
泛型方法定义与调用4道Q007,Q010-Q012
类型通配符PECS原则3道Q013-Q014,Q017
类型擦除机制3道Q019-Q020,Q024
泛型与继承关系3道Q025,Q028-Q029
泛型与反射1道Q032
泛型最佳实践1道Q048
💡 参考答案在文末
判断题
1

由于类型擦除,在运行时完全无法获取任何泛型类型信息。

A

B

2

泛型类在实例化时必须指定具体的类型参数,如new Box()。

A

B

3

使用有界类型参数(Bounded Type Parameter)如可以限制类型参数范围,并提供更多可用方法。

A

B

4

一个类实现泛型接口时,既可以指定具体类型,也可以保留泛型参数成为泛型类。

A

B

5

类型参数可以继承其他类或实现接口,如表示T必须是Number或其子类。

A

B

6

泛型类中的静态方法可以使用类的类型参数,因为静态方法属于类。

A

B

单选题
7

以下代码的执行结果是什么?

Java
public static <T> T first(List<T> list) {
    return list.get(0);
}
List<String> strings = Arrays.asList("a", "b", "c");
String result = first(strings);
A

编译错误,需要显式指定类型参数

B

编译成功,编译器推断T为String

C

编译成功,返回Object类型需要强转

D

运行时抛出ClassCastException

8

关于泛型方法,以下说法正确的是:

A

泛型方法只能定义在泛型类中

B

泛型方法的类型参数声明必须在返回值类型之前

C

泛型方法的类型参数与泛型类的类型参数是同一个

D

泛型方法不能使用静态修饰符

9

Java标准库中的Comparable接口,以下哪种实现方式是正确的?

A

class Person implements Comparable { public int compareTo(Object o) {...} }

B

class Person implements Comparable { public int compareTo(Person o) {...} }

C

class Person implements Comparable<Person> { public int compareTo(Person o) {...} }

D

以上都可以

10

PECS原则的含义是什么?

A

Producer Extends Consumer Super - 生产者用extends,消费者用super

B

Producer Super Consumer Extends - 生产者用super,消费者用extends

C

Private Extends Public Super - 私有继承公有

D

Parameter Extends Class Super - 参数继承类

11

关于泛型类的定义,以下哪个是正确的语法?

A

public class Box { private T value; }

B

public class Box<T, V> { private T value; }

C

public class Box { private type value; }

D

public class Box { private T value; }

12

泛型类本身可以继承其他类吗?

A

泛型类不能继承其他类

B

泛型类可以继承普通类或泛型类

C

泛型类只能继承泛型类

D

泛型类只能继承普通类

13

Java泛型的类型擦除机制是什么?

A

编译时擦除类型参数,运行时保留泛型信息

B

编译时擦除类型参数,运行时泛型信息被替换为边界类型或Object

C

运行时擦除类型参数,编译时保留泛型信息

D

泛型信息不会被擦除,一直保留到运行时

多选题
14

关于泛型通配符的限制,以下说法正确的有哪些?

A
B
C
D
15

由于类型擦除,以下哪些情况会导致问题或限制?

A

无法创建泛型数组,如new List[10]

B

无法使用instanceof检查泛型类型,如obj instanceof List

C

无法创建类型参数的实例,如new T()

D

方法重载时,不同泛型参数的方法签名相同

16

以下哪个赋值语句是正确的?

A

List list = new ArrayList();

B

List list = new ArrayList();

C

List list = new ArrayList();

D

Object[] array = new String[10]; // 这行正确,但List list = new ArrayList()不正确

17

关于Java反射中的Type体系,以下说法正确的有哪些?

A

Type是所有类型的公共父接口

B

ParameterizedType表示参数化类型,如List

C

TypeVariable表示类型变量,如泛型参数T

D

WildcardType表示通配符类型,如?、? extends Number

填空题
18

泛型方法的类型参数声明必须在____________之前,语法格式为:____________

19

Java泛型类常用的类型参数命名约定:____________表示任意类型,____________表示集合元素类型,____________表示键类型,V表示值类型,N表示数值类型。

简答题
20

请简述<? extends T>和<? super T>的区别及各自的适用场景。

参考答案
1.错误 2.正确 3.正确 4.正确 5.正确 6.错误 7.B 8.B 9.D 10.A 11.A 12.B 13.B 14.A;B;C;D 15.A;B;C;D 16.C;D 17.A;B;C;D 18.返回值类型;修饰符 <类型参数> 返回值类型 方法名(参数列表) 19.T;E;K 20.
想在手机上练习这套试卷?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码
← 上一套试卷 JAVA数组与方法专题测试
下一套试卷 → JAVA线程安全与同步机制专题测试
扫码体验小程序
加载中
想在手机上刷题学习?
使用微信卷王开发者小程序,打开首页顶部扫码功能识别二维码