public class ListUtil {
    private ListUtil() {

    }
    public static<E> void addAll(ArrayList<E> list,E e1,E e2,E e3){//E...e即可添加多个参数
        list.add(e1);
        list.add(e2);
        list.add(e3);
    }
}
-----------------
public class GenericsTest {
    public static void main(String[] args) {
        ArrayList<String> list=new ArrayList<>();
        ListUtil.addAll(list,"1","2","3");
        System.out.println(list);
    }
}
--------------------------------------------------
1. 实现类实现泛型接口时,指定具体的类型
public class MyArrayList implements List<String>{.......}
2.实现类延续泛型,创建实现类对象时再确定类型
public class MyArrayList2<E> implements List<E> {.......}
--------------------------------------------------------
public class GenericsTest2 {
    /*
    泛型接口的两种实现方法
    1. 实现类实现泛型接口时,指定具体的类型
    2.实现类延续泛型,创建实现类对象时再确定类型
     */
    //1.实现类实现泛型接口时,指定具体的类型(一旦指定了具体类型,就不再可以更改)
    MyArrayList myArrayList = new MyArrayList();
    //2.实现类延续泛型,创建实现类对象时再确定类型
    MyArrayList2<String> myArrayList2 = new MyArrayList2<>();
}