Java高级知识复盘之泛型

104 阅读1分钟

Java高级知识复盘之泛型

泛型类

  • 泛型符号 出现 类的声明处 <>
  • 在本类中 当作已知类型 来用
  • 静态方法不能出现 类的泛型符号
// 泛型符号,个数不要求,名称不要求,T-type E-element K-key V-value ;
public class Student<A, B, C> {
    private A a;
    private B b;
    private C c;
    
    /**
     * 静态方法不能出现 类的泛型符号
     * @param a
     */
​
    public A getA() {
        return a;
    }
​
    public void setA(A a) {
        this.a = a;
    }
​
    public B getB() {
        return b;
    }
​
    public void setB(B b) {
        this.b = b;
    }
​
    public C getC() {
        return c;
    }
​
    public void setC(C c) {
        this.c = c;
    }
}

泛型接口

泛型符号,出现在接口声明处为泛型接口

接口定义

public interface Inter<A, B> {
    //本接口中 当成已知类型来用
​
    A methodA(A a);
​
    B methodB(B b);
}

1,实现类直接确定类型

//1, 在实现类中 直接确定类型
public class InterImpl1 implements Inter<String, Integer> {
​
    @Override
    public String methodA(String s) {
        return null;
    }
​
    @Override
    public Integer methodB(Integer integer) {
        return null;
    }
}

2,实现类中泛型符号如果不指定类型,则默认当成Object

//2, 实现类中泛型符号如果不指定类型则当成Object
public class InterImpl2 implements Inter {
    @Override
    public Object methodA(Object o) {
        return null;
    }
​
    @Override
    public Object methodB(Object o) {
        return null;
    }
}

3,实现类带上泛型符号,等到创建对象的时候确定

public class InterImpl3<A, B, C> implements Inter<A, B> {
    private A a;
    private C c;
​
​
    public void run(A a) {
    }
​
    @Override
    public A methodA(A a) {
        return null;
    }
​
    @Override
    public B methodB(B b) {
        return null;
    }
}

泛型方法

在进行方法调用的时候,根据实参确定泛型的类型

泛型符号,在本方法中,当成已知类型来用

泛型上下限

  • ? 表示通配符 可以是任意引用类型
  • ? extends Animal 泛型的上限:可以是Animal类型或Animal的子类型
  • ? super Animal : 泛型的下限:可以是Animal 或 Animal的父类型