泛型

 泛型(generic)

    特点:

      【1】泛型允许开发者在强类型程序设计语言(java)编写代码时定义一些可变部分,这些部分在使用前必须作出指明

      【2】泛型在编译器起作用,运行时jvm察觉不到泛型的存在。

1     泛型的擦除

      【1】泛型在运行时已经被擦除了。

2     泛型类

      【1】当一个类中属性的数据类型不确定时,具体是什么类型由使用者来确定时,使用泛型。泛型类的形式

public class FanClass<T> {
    private T t;

    public T getT() {
        return t;
    }

    public void setT(T t) {
        this.t = t;
    }

    public FanClass(T t) {
        super();
        this.t = t;
    }

    public FanClass() {
        super();
    }
}

 

3    泛型方法

      【1】当一个方法的参数类型不确定时,具体是什么类型由使用者来确定,可以考虑使用泛型方法。

      【2】泛型方法在调用时确定(指明)类型。

      【3】泛型方法在一定程度上优化了方法重载。

    public <T> void xxx(T a) {
        System.out.println(a);
    }

    【4】多个泛型类型进一步优化了方法重载。

// 多个同类型的泛型
    /*public <A> void print(A a) {
        System.out.println(a);
    }
    public <A> void print(A a,A b) {
        System.out.println(a);
        System.out.println(b);
    }*/
    
    public <A> void print(A...a) {
        System.out.println(a);
    }

4     泛型接口

    【1】如果接口中的方法的参数(形参、返回值)不确定时,可以考虑使用泛型接口。

public interface FanInterface<T> {
    public void showInfo(T t);
}
public interface FanInterface<T> {
    public void showInfo(T t);
}

   【2】实现类能确定泛型接口的类型

public class ImplClass implements FanInterface<String>{

    @Override
    public void showInfo(String t) {
        // TODO Auto-generated method stub
        
    }
}

   【3】实现类不能确定泛型接口的类型->继续泛。

public class ImplClass2<T> implements FanInterface<T>{

    @Override
    public void showInfo(T t) {
        
    }
}

4     泛型的上限和下限

    【1】泛型的上限ArrayList(? extends Pet) list 声明了一个容器,容器中的元素类型一定要继承于Pet,我们称这种形式叫做泛型的上限。

    【2】泛型的下限ArrayList(? super Pet) list 声明了一个容器,容器中的元素类型一定要是Pet的父类,我们称这个形式为泛型的下限。

原文地址:https://www.cnblogs.com/dedema/p/10821660.html