Untitled

// 泛型类
class MyArraylist<E> {
    private Object[] objs = new Object[10];
    private int size = 0;

    public void add(E e) {
        objs[size] = e;
        size++;
    }
    public E get(int index) {
        return (E) objs[index];
    }

    @Override
    public String toString() {
        return Arrays.toString(objs);
    }
}
class ListUtil{
    private ListUtil(){};
    public static<E> void addAll(ArrayList<E> list, E...e) {
        for(E element: e) {
            list.add(element);
        }
    }
}
public class Generic {
    @Test
    public void test1() {
        MyArraylist<String> list = new MyArraylist<>();
        list.add("1234");
        list.add("84848");
        list.add("92929");
        System.out.println(list);
    }
    @Test
    public void test2() {
        ArrayList<String> list = new ArrayList<>();
        ListUtil.addAll(list, "123", "34234");
        System.out.println(list);
    }
}
/* 泛型的通配符
    泛型不具备继承性,而数据具备继承性。
    为了限定泛型值特定的类型,因此要使用泛型的通配符
    ? extends Ye, 限定这个泛型是Ye,或者他的儿子
    ? super Zi, 限定这个泛型是Zi,或者他的父亲
 */
class Ye{}
class Fu extends Ye{}
class Zi extends Fu{}

public class Generic02 {
    @Test
    public void main(){
        ArrayList<Ye> list1 = new ArrayList<>();
        ArrayList<Fu> list2 = new ArrayList<>();
        ArrayList<Zi> list3 = new ArrayList<>();
        method(list1);
        method(list2);
        method(list3);
    }
    public void method(ArrayList<? extends Ye> list) {
        System.out.println(list);
    }
}

// 普通变量使用泛型的继承
public static <E extends Cat> void method1(E e) {
      System.out.println(e);
  }