package 泛型;
import java.util.*;
/**
* 泛型的高级使用
* 1.泛型的继承或接口,用extends在<>里面实现
* 2.语法:A<T extends anyClass>a;这里的泛型T必须是anyClass的子类
* eg:Demo <T extends list>{} 这里的T可以使是ArrayList 或者
* LinkedList 或者不写 但是不能为HashSet等 因为HashSet不是list的子类
*
* 泛型通配符
* 1.说明:限制泛型的类型,并且限制泛型对象的使用,不能在类的建立的时候就用
* 类名<?>{}这样就是错的
* 类名<T>{}正确
* 2.语法: A<?> a;泛型的通配符,不可以对对象进项添加和修改,但是可以删除,也能读取
* A<? extends anyClass> a; 泛型必须是anyClass的子类,且此对象不能增加和改写的操作
* A<? super anyClass> a;泛型必须是anyClass的父类
*
*
* @author 小虎牙
*
*/
public class fanxing2 {
public static void main(String[] args) {
// 第一种情况 A<?> a;
List<String> li = new ArrayList<>();
li.add("我有一个梦");
List<?> l2 = li;
System.out.println(li.get(0));
System.out.println("我是第一情况的通配符只能读取:" + l2.get(0));
/**
* 这里使用添加修改就失败了
* l2.set(1, "我要添加或者修改");
*/
/**
* 这里删除就成功啦
*/
l2.remove(0);
System.out.println("这里是li大小:"+li.size());
System.out.println("这里是l2大小:" + l2.size());
/**
* 第二种情况 List<? extends 类名A> a=new arrayList<类名A或者是他的子类>();
* 且此对象不能增加和改写的操作
*/
// 第三种情况 List<? super 类名A> a=new arrayList<类名A或者是他的父类>();
}
}