1. interface List{} , public class HashSet..等等
    • 说明:T,E只能是引用类型
    • List list = new ArrayList(); //OK
    • List list2 = new ArrayList();//报错!!!
    1. 在给泛型指定具体类型后,可以传入该类型或者其子类类型
    2. 泛型使用形式

    List list1 =new ArrayList();
    List list2 = new ArrayList<>();
    3.如果我们这样写 List list3 = new ArrayList(); 默认给它的泛型是[E就是Object ]即:

    1. package test;
    2. import java.util.ArrayList;
    3. import java.util.List;
    4. public class Main {
    5. public static void main(String[] args) {
    6. //1.给泛型指向数据类型是,要求是引用类型,不能是基本数据类型
    7. List<Integer> list = new ArrayList<Integer>(); //OK
    8. //List<int> list2 = new ArrayList<int>();//错误
    9. //2. 说明
    10. //因为 E 指定了 A 类型, 构造器传入了 new A()
    11. //在给泛型指定具体类型后,可以传入该类型或者其子类类型
    12. Pig<A> aPig = new Pig<A>(new A());
    13. aPig.f();
    14. Pig<A> aPig2 = new Pig<A>(new B());
    15. aPig2.f();
    16. //3. 泛型的使用形式
    17. ArrayList<Integer> list1 = new ArrayList<Integer>();
    18. List<Integer> list2 = new ArrayList<Integer>();
    19. //在实际开发中,我们往往简写
    20. //编译器会进行类型推断, 推荐使用下面写法
    21. ArrayList<Integer> list3 = new ArrayList<>();
    22. List<Integer> list4 = new ArrayList<>();
    23. ArrayList<Pig> pigs = new ArrayList<>();
    24. //4. 如果是这样写 泛型默认是 Object
    25. ArrayList arrayList = new ArrayList();//等价 ArrayList<Object> arrayList = new ArrayList<Object>();
    26. /*
    27. public boolean add(Object e) {
    28. ensureCapacityInternal(size + 1); // Increments modCount!!
    29. elementData[size++] = e;
    30. return true;
    31. }
    32. */
    33. Tiger tiger = new Tiger();
    34. /*
    35. class Tiger {//类
    36. Object e;
    37. public Tiger() {}
    38. public Tiger(Object e) {
    39. this.e = e;
    40. }
    41. }
    42. */
    43. }
    44. }
    45. class Tiger<E> {//类
    46. E e;
    47. public Tiger() {}
    48. public Tiger(E e) {
    49. this.e = e;
    50. }
    51. }
    52. class A {}
    53. class B extends A {}
    54. class Pig<E> {
    55. E e;
    56. public Pig(E e) {
    57. this.e = e;
    58. }
    59. public void f() {
    60. System.out.println(e.getClass()); //运行类型
    61. }
    62. }

    image.png