柚子快報邀請碼778899分享:開發(fā)語言 Java 泛型
柚子快報邀請碼778899分享:開發(fā)語言 Java 泛型
?
一,3種泛型方式:泛型類、泛型接口、泛型方法
泛型類
//此處T可以隨便寫為任意標(biāo)識,常見的如T、E、K、V等形式的參數(shù)常用于表示泛型
//在實例化泛型類時,必須指定T的具體類型
public class Generic
? ? private T key;
????public Generic(T key) {
????????this.key = key;
????}
????public T getKey(){
????????return key;
????}
}
泛型接口
public interface Generator
????public T next();
}
// 實現(xiàn)泛型接口時,可以傳入或者不傳實際類型:
public class FruitGenerator
public class FruitGenerator implements Generator
泛型方法
// 只有聲明了
// 此處T可以隨便寫為任意標(biāo)識,常見的如T、E、K、V等形式的參數(shù)常用于表示泛型
public
T instance = tClass.newInstance();
return instance;
}
靜態(tài)方法要使用泛型的話,必須將靜態(tài)方法也定義成泛型方法?
public class StaticGenerator
????public static
????}
}
泛型方法中添加上下邊界的時候,必須在權(quán)限聲明與返回值之間的
// 編譯器會報錯
public
public
????System.out.println("container key :" + container.getKey());
????T test = container.getKey();
????return test;
}
? ? ? ? ? ? ? ? ? ?
二,Tips
1,類型擦除:泛型類型只在編譯階段有效。
2,不能創(chuàng)建一個確切類型的泛型數(shù)組,而使用通配符?是可以的。
[?] List
new
ArrayList
[?] List>[] ls =
new ArrayList>[10];
[?] List
new
ArrayList[10];
3,無法對泛型代碼直接使用
instanceof
關(guān)鍵字,而使用通配符?是可以的。
[?]
list??
instanceof??
ArrayList
[?]?
list
instanceof
ArrayList>
4,注意兩種繼承情況
① 第一種
public void showKeyValue(Generic
????Log.d("泛型測試","key value is " + obj.getKey());
}
Generic
Generic
[?] showKeyValue(gNumber);
[?] showKeyValue(gInteger); //編譯報錯
② 第二種
class Fruit {
????@Override
????public String toString() {
????????return "fruit";
????}
}
class Apple extends Fruit {
????@Override
????public String toString() {
????????return "apple";
????}
}
class GenerateTest
????public void show_1(T t) {
????????System.out.println(t.toString());
????}
}
public static void main(String[] args) {
????Apple apple = new Apple();
????GenerateTest
????//apple是Fruit的子類,所以這里可以
?? ?[?]generateTest.show_1(apple);
}? ??
柚子快報邀請碼778899分享:開發(fā)語言 Java 泛型
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。