package java4;
import com.sun.org.apache.xpath.internal.operations.NotEquals;
import java1.Person;
import org.junit.Test;
import java.util.*;
/**
*
* 1.泛型在继承方面的体现
*
*
* 2.通配符的使用
* @author 冀帅
* @date 2020/8/14-16:24
*/
public class GenericTest {
/*
* 1.泛型在继承方面的体现
* 虽然类A是类B的一个父类,但是G<A>和G<B>二者不具备子父关系,二者是并列关系。
* 补充:类A是类B的一个父类,A<G>是 B<G>的父类
*
* */
@Test
public void test1(){
Object obj = null;
String str = null;
obj=str;
Object[] arr1 = null;
String[] arr2 = null;
arr1=arr2;//子类对象可以赋给父类对象
List<Object> list1 = null;
List<String> list2 = null;
// list1=list2;//编译错误 此时的list1和list2的类型不具备子父类关系
Date date = new Date();
// str =date;//编译错误
}
@Test
public void test2(){
AbstractList<String> list1 = null;
List<String> list2 = null;
ArrayList<String> list3 = null;
list1 = list3;//正确
list2 = list3;//正确
List<String> list4 = new ArrayList<>();
}
/*
*2.通配符的使用
* 通配符:?
* 类A是类B的父类,G<A>和G<B>是没有关系的,二者共同的父类时:G<?>
*
*
* */
@Test
public void test3(){
List<Object> list1 = null;
List<String> list2 = null;
List<?> list = null;//通用父类
list=list1;
list=list2;
// print(list1);
// print(list2);编译通过
//
List<String> list3 = new ArrayList<>();
list3.add("AA");
list3.add("BB");
list3.add("CC");
list = list3;
//添加(写入):对于List<?>就不能向其内添加数据。
//除了添加null之外
// list.add("DD");
// list.add("?");编译不成功
list.add(null);
//获取(读取):允许读取数据,读取的数据类型为Object。
Object o = list.get(0);
System.out.println(o);//AA
}
public void print(List<?> list){
Iterator<?> iterator = list.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}