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
}