- interface List
{} , public class HashSet ..等等
- interface List
- 说明:T,E只能是引用类型
- List
list = new ArrayList (); //OK - List
list2 = new ArrayList ();//报错!!!
- 在给泛型指定具体类型后,可以传入该类型或者其子类类型
- 泛型使用形式
List
List
3.如果我们这样写 List list3 = new ArrayList(); 默认给它的泛型是[
package test;import java.util.ArrayList;import java.util.List;public class Main {public static void main(String[] args) {//1.给泛型指向数据类型是,要求是引用类型,不能是基本数据类型List<Integer> list = new ArrayList<Integer>(); //OK//List<int> list2 = new ArrayList<int>();//错误//2. 说明//因为 E 指定了 A 类型, 构造器传入了 new A()//在给泛型指定具体类型后,可以传入该类型或者其子类类型Pig<A> aPig = new Pig<A>(new A());aPig.f();Pig<A> aPig2 = new Pig<A>(new B());aPig2.f();//3. 泛型的使用形式ArrayList<Integer> list1 = new ArrayList<Integer>();List<Integer> list2 = new ArrayList<Integer>();//在实际开发中,我们往往简写//编译器会进行类型推断, 推荐使用下面写法ArrayList<Integer> list3 = new ArrayList<>();List<Integer> list4 = new ArrayList<>();ArrayList<Pig> pigs = new ArrayList<>();//4. 如果是这样写 泛型默认是 ObjectArrayList arrayList = new ArrayList();//等价 ArrayList<Object> arrayList = new ArrayList<Object>();/*public boolean add(Object e) {ensureCapacityInternal(size + 1); // Increments modCount!!elementData[size++] = e;return true;}*/Tiger tiger = new Tiger();/*class Tiger {//类Object e;public Tiger() {}public Tiger(Object e) {this.e = e;}}*/}}class Tiger<E> {//类E e;public Tiger() {}public Tiger(E e) {this.e = e;}}class A {}class B extends A {}class Pig<E> {E e;public Pig(E e) {this.e = e;}public void f() {System.out.println(e.getClass()); //运行类型}}

