java學習----泛型
目錄
1.泛型的定義
2.泛型的使用
3.泛型通配符
一、泛型的定義
泛型是java5的新特性,使用泛型會讓程序編寫簡單安全,在編譯的時候就會檢查類型是否安全
定義:所謂泛型就是允許在定義類、接口和方法使用參數類型這個類型形參可以在聲明變量、
創建對象、調用方法時動態指定(類型實參)泛型的參數類型只能是引用類型,不能是基本類型
二、泛型的使用
1.泛型接口
泛型接口格式:
修飾符 interface 接口名<T...>{}
泛型接口Demo:
public interface Action<E> {//在接口中使用泛型E E getE(); //在接口中使用泛型抽象方法 <T> T getT(int i); }
2.泛型類
泛型類格式:
修飾符 class 類名<T...>{
使用T; }
泛型類Demo:
//類上聲明泛型E public class ActionImpl<E>{ //聲明E類型變量 private E e; //使用E類型 public E getE() { // TODO Auto-generated method stubreturn e; } public ActionImpl(E e){ this.e = e ; } }
3.泛型方法
泛型方法格式:
修飾符<T...> 返回值 方法名 (參數列表){
使用T; }
泛型方法Demo:
public class GenericWay { //方法上聲明泛型T類型 public static <T> T get(T t){ return t; } }
三、泛型通配符
泛型通配符的符號是?
普通的泛型與泛型通配符的泛型Class<T>與Class<?>的區別在於:
Class<T> :在實例化的時候,T需要替換成具體的類型
在泛型類、方法中可以使用T,還可以操作T類型的變量
Class<?>:他是通配符,?可以表示任何類型(使用了泛型)
泛型通配符可以匹配任意類型。
泛型通配符Demo:
import java.util.ArrayList; import java.util.List; public class GWC { //參數是list,list裏的類型可以是任意類型 public void forList(List<?> l){ for (Object object : l) { System.out.println(object); } } public static void main(String[] args) { GWC gwc = new GWC(); List<Integer> l1 = new ArrayList<>(); l1.add(1); l1.add(2); gwc.forList(l1); List<String> l2 = new ArrayList<>(); l2.add("1"); l2.add("2"); gwc.forList(l2); } }
通配符上限
舉個栗子:
List<? extends Number> 這麽聲明的數只能是number類型或number類型的子類
通配符上限Demo:
import java.util.ArrayList; import java.util.List; public class GWCTop { public void forList(List<? extends Number> l){ for (Number number : l) { System.out.println(number); } } public static void main(String[] args) { GWCTop gwcTop = new GWCTop(); //Object 類型是number類型的父類編譯報錯; //List<Object> list = new ArrayList<>(); //String 類型不是number編譯器報錯; //List<String> list = new ArrayList<>(); List<Number> list = new ArrayList<>(); gwcTop.forList(list); } }
通配符下限
舉個栗子:
List<? super Number> 這麽聲明的數只能是number類型或number類型的父類
通配符下限Demo:
import java.util.ArrayList; import java.util.List; public class GWCUnder { public void forList(List<? super Number> l){ for (Object object : l) { System.out.println(object); } } public static void main(String[] args) { GWCUnder gwcUnder = new GWCUnder(); //Integer 類型是Number類型的父類,編譯不通過; //List<Integer> list = new ArrayList<>(); //String 類型不是Number類型的父類,編譯不通過; //List<String> list = new ArrayList<>(); List<Object> list = new ArrayList<>(); gwcUnder.forList(list); } }
java學習----泛型