泛型在方法中的使用規則是什么?
【重點】
格式:權限修飾符[static] <自定義泛型> 回傳值型別 方法名(形參){ }
1.要求形式引數串列中必須有一個引數是當前自定義泛型;因為需要通過引數來約束,當前方法運行程序中泛型對應的具體資料型別;
2.回傳值型別可以使用自定義泛型,而且是被形式引數串列中傳入的泛型對應具體數型別控制;
3.方法內也可以使用自定義泛型,同時也是被引數當中泛型對應具體資料型別約束監控;
自定義泛型在代碼中的使用
class Member {
public static void main(String[] args) {
//傳入什么型別就回傳什么型別
//傳入一個Integer型別的數值,回傳值也是Integer 型別;
Integer type1 = getType(1);
Float type2 = getType(3.14F);
Member type3 = getType(new Member());
String type4 = getType("小哈");
List list = getType(new ArrayList());
}
//T type 獲取傳入引數的資料型別
//<T>T 回傳值型別限定了和傳入的資料型別一致;
//也就是形參位置 需要一個 T 當然可以替換為任意一個大寫字母 A,不過要<A>A 保持一致
//回傳值位置 需要 <T>T
public static <T>T getType(T t){
return t;
}
}
泛型傳遞決議圖(圖片為網路獲取)

<1> 一開始Integer type = getType(1); 中的實參1會傳遞給getType(T t){};方法形參,形參T由此獲取為Integer型別,
<2>形參T獲取為Integer型別后傳遞給 T 回傳值資料型別;
<3>也就最后方法相當于 public static Integer getType(Integer t);
class Member {
public static void main(String[] args) {
//傳入什么型別就回傳什么型別
//傳入一個Integer型別的數值,回傳值也是Integer 型別;
Integer type1 = getType(1);
Float type2 = getType(3.14F);
Member type3 = getType(new Member());
String type4 = getType("小哈");
List list = getType(new ArrayList());
//任意型別的展示方法
printEverything(1);
printEverything(1.00F);
printEverything(1.66D);
printEverything(new char[]{'a', 'b'});
//展示任意型別的陣列
printEveryArray(new String[]{"AA","BB"});
//泛型這里 需要用包裝類 char[] 陣列需要用包裝類 Character[]
printEveryArray(new Character[]{'a', 'b'});
//泛型這里 需要用包裝類 int[] 陣列需要用包裝類 Integer[]
printEveryArray(new Integer[]{1,0});
}
//T type 獲取傳入引數的資料型別
//<T>T 回傳值型別限定了和傳入的資料型別一致;
//也就是形參位置 需要一個 T 當然可以替換為任意一個大寫字母 A,不過要<A>A 保持一致
//回傳值位置 需要 <T>T
public static <T>T getType(T t){
return t;
}
//一個可以滿足任意型別的展示方法
//回傳值型別占位符是對應形參的,一定要存在【如果入參形參有T,回傳值型別<T>也要存在】;
public static <T> void printEverything(T t){
System.out.println(t);
}
//一個方法可以滿足展示任意型別的陣列
//【如果入參形參有T,回傳值型別<T>也要存在】
public static <T> void printEveryArray(T[] tArrays){
for(int i = 0;i < tArrays.length;i++){
System.out.println(tArrays[i]);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/404388.html
標籤:其他
上一篇:Android開發環境搭建
