写法
声明类<引用类型>名称=new 实际创建类<>();
泛型可以指定为任意引用类型,当指定为具体的类型时,后续就只能操作对应类型的对象—泛型的擦除(编译时期)
1、创建没有范围的集合对象
List list=new ArrayList<>();
需要遍历集合(因为没有指定元素类型,此时每个元素类型都是Object类型需要把每个元素对象的类型进行强转成对应的类型)
for(Object l:list){
//判断元素对象的具体类型
if(l instanceof String){
String s=(String) l;
}else {
Character c=(Character) l;
}
2、指定泛型
后续只能操作对应类型的泛型
List list1=new ArrayList<>();
泛型的上下限(不允许同时出现)
泛型不支持向上造型
1、泛型的上限<? extends Number>
?代表可以接收的类型(只能放在最左边)—可以接收Number类以及Number的子类<? extends 类/接口>—可以接收类/接口以及子类/子接口
2、泛型的下限<? super Number>
可以接受String类以及String类的父类
<?super类/接口>---可以接收类/接口以及父类/父接口