1. Java中泛型是什么?
泛型只存在于编译阶段,而不存在于运行阶段。
“ 泛型 ” 意味着编写的代码可以被不同类型的对象所重用。
“
泛型
”
,顾名思义,
“
泛指的类型
”
。我们提供了泛指的概念,但具体执行的时候却可以有具体的规则来约束,比如我们用的非常多的ArrayList
就是个泛型类,
ArrayList
作为集合可以存放各种元素,如 Integer, String,自定义的各种类型等,但在我们使用的时候通过具体的规则来约束,如我们可以约束集合中只存放Integer
类型的元素,如
List<Integer> iniData = new ArrayList<>()
比如我们要写一个排序方法, 能够对整型数组、字符串数组甚至其他任何类型的数组进行排序,我们就可以使用 Java 泛型。
2. 使用泛型的好处有哪些?
以集合来举例,使用泛型的好处是我们不必因为添加元素类型的不同而定义不同类型的集合,如整型集合类,浮点型集合类,字符串集合类,我们可以定义一个集合来存放整型、浮点型,字符串型数据,而这并不是最重要的,因为我们只要把底层存储设置了Object
即可,添加的数据全部都可向上转型为Object。 更重要的是我们可以通过规则按照自己的想法控制存储的数据类型。
3. 泛型中的限定通配符和非限定通配符是什么?
- 限定通配符
- 限定通配符对类型进行了限制。有两种限定通配符,一种是<? extends T>它通过确保类型必须是T的子类来设定类型的上界,另一种是<? super T>它通过确保类型必须是T的父类来设定类型的下界。泛型类型必须用限定内的类型来进行初始化,否则会导致编译错误。
- 非限定通配符
- 非限定通配符?,可以用任意类型来替代。如List<?>的意思是这个集合是一个可以持有任意类型的集合,它可以是(List<A>,也可以是(List<B> ,或者List<c>等等。