尚硅谷java学习笔记——8.java泛型(Generic)

来源:互联网 发布:冬不拉教程软件 编辑:程序博客网 时间:2024/05/28 01:34

一、为什么要用泛型?

JDK1.5新加入的
1.解决元素存储的安全性问题。
2.解决获取数据元素时,需要类型强转的问题

把一个集合中的内容限制为一个特定的数据类型,这就是generics背后的核心思想。

二、使用泛型

1、泛型的声明
interface List< T> 和 class TestGen< K,V>
其中,T,K,V不代表值,而是表示类型。这里使用任意字母都可以。常用T表示,是Type的缩写。
2、泛型的实例化:
List< String> strList = new ArrayList< String>();
Iterator< Customer> iterator = customers.iterator();
T只能是类,不能用基本数据类型填充。

对于泛型类(含集合类)

对象实例化时不指定泛型,默认为:Object。
静态方法中不能使用类的泛型。
不能在catch中使用泛型
从泛型类派生子类,泛型类型需具体化

对于泛型方法

在泛型方法中可以定义泛型参数,此时,参数的类型就是传入数据的类型。
泛型方法的格式:
[访问权限] <泛型> 返回类型 方法名([泛型标识 参数名称]) 抛出的异常

//实现数组到集合的复制public <E> List<E> fromArrayToList(E[] e,List<E> list){    for(E e1 : e){        list.add(e1);    }    return list;}

三、泛型与继承的关系

Object obj=null;String str="AA";obj=str;Object[] obj1=null;String[] str1=new String[]{"AA","BB","CC"};obj1=str1;List<Object> list=null;List<String> list1=new ArrayList<String>();//list=list1; 错误//通配符 ?  List<A>、List<B>、......都是List<?>的子类List<?> list2=null;list2=list;list2=list1;//? extends A :可以存放A及其子类  小于等于A类型List<? extends Number> list3=null;List<Integer> list4=null;list3=list4;//list3=list; 错误 Object 不是Number的子类//? super A :可以存放A及其父类  大于等于A类型List<? super Number> list5=null;list5=list;

若类A是类B的子类,那么List< A>就不是List< B>的子接口

0 0