1. 泛型引入
1、使用传统方法的问题
-
不能对加入到集合 ArrayList 中的数据类型进行约束(不安全)
-
遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响
2、泛型的好处
- 编译时,检查添加元素的类型,提高了安全性
- 减少了类型转换的次数,提高效率
- 不在提示编译警告
3、泛型介绍
- 泛型又称参数化类型,是jdk5.0 出现的新特性,解决数据类型的安全性问题
- 在类声明或实例化时只要指定好需要的具体的类型即可
- Java泛型可以保证如果程序在编译时没有发出警告,运行时就不会产生ClassCastException异常。
- 泛型的作用是:可以在类声明时通过一个标识表示类中某个属性的类型,或者是某个方法的返回值的类型,或者是参数类型。
package com.hspedu.generic;
public class Generic03 {
public static void main(String[] args) {
Person<String> person = new Person<String>("教育");
}
}
class Person<E> {
E s; //E 表示s 的数据类型,该数据类型在定义Person对象的时候指定,即在编译期间,就确定E是什么类型
public Person(E s) { //E也可以是参数类型
this.s = s;
}
public E f() { //返回类型使用E
return s;
}
}
4、泛型的语法
-
泛型的声明:
interface 接口
{} 和 class 类<K,V>{} - 其中,T,K,V不代表值,而是表示类型
- 任意字母都可以,常用 T 表示,是Type 的缩写
-
泛型的实例化:
要在类名后面指定类型参数的值(类型)。如:
- List
strList = new ArrayList (); - Iterator
iterator = custmers.iterator();
- List
5、泛型使用的注意事项和细节
-
interface List
{} , public class HashSet (); 说明:T,E 只能是引用类型
-
在给泛型指定具体类型后,可以传入该类型或者其子类类型
-
使用形式
//编译器会进行类型推断 推荐使用 ArrayList<Integer> list = new ArrayList<>(); List<Integer> list2 = new ArrayList<>();
-
如果我们这样写 List list3 = new ArrayList(); 默认给它的泛型是 [
E 就是 Object]