泛型使用場景

南翔技校毕业后發表於2024-03-20

1 泛型集合

public class ArrayList<E>{

}

對E這個型別進行操作。

2 泛型類

public class FanXing<T> {

    public T t;

    public T getT() {
        return t;
    }

    public FanXing(T t) {
        this.t = t;
    }

    public static void main(String[] args) {
        FanXing<String> fx1 = new FanXing<>("a");
        FanXing<Integer> fx2 = new FanXing<>(1);
        System.out.println(fx1.getT().getClass());  //java.lang.String
        System.out.println(fx2.getT().getClass());  //java.lang.Integer
    }

}

直接利用泛型來定義成員變數。

3 泛型介面

public interface IFanXing<T1, T2> {
    T1 show1(T2 t);

    T2 show2(T1 t);
}
public class FanXing implements IFanXing<String, Integer> {

    @Override
    public String show1(Integer t) {
        return String.valueOf(t);
    }

    @Override
    public Integer show2(String t) {
        return Integer.valueOf(t);
    }

    public static void main(String[] args) {
        FanXing fanXing = new FanXing();
        System.out.println(fanXing.show1(1));  //1
        System.out.println(fanXing.show2("1"));  //1
    }

}

直接利用泛型來定義引數型別。

4 泛型方法

定義泛型方法只需將泛型引數列表置於返回值之前;利用泛型來定義引數型別。

4-1 普通泛型方法

public class FanXing {

    public <T> void f(T t){
        System.out.println(t.getClass().getName());
    }

    public static void main(String[] args) {
        FanXing fanXing = new FanXing();
        fanXing.f("");      //java.lang.String
        fanXing.f(1);       //java.lang.Integer
        fanXing.f(1.0);     //java.lang.Double
        fanXing.f(1.0F);    //java.lang.Float
        fanXing.f('a');     //java.lang.Character
    }

}

4-2 靜態泛型方法

靜態方法無法訪問泛型類的型別引數,如果方法需要使用泛型能力,就必須使其成為泛型方法。

public static <T> void f(T t){
    System.out.println(t.getClass().getName());
}

public static void main(String[] args) {
    FanXing.f("");      //java.lang.String
    FanXing.f(1);       //java.lang.Integer
    FanXing.f(1.0);     //java.lang.Double
    FanXing.f(1.0F);    //java.lang.Float
    FanXing.f('a');     //java.lang.Character
}

相關文章