Java 泛型

Java 泛型了解么?什么是類型擦除?介紹一下常用的通配符?

Java 泛型(generics)是 JDK 5 中引入的一個(gè)新特性, 泛型提供了編譯時(shí)類型安全檢測機(jī)制,該機(jī)制允許程序員在編譯時(shí)檢測到非法的類型。泛型的本質(zhì)是參數(shù)化類型,也就是說所操作的數(shù)據(jù)類型被指定為一個(gè)參數(shù)。
Java 的泛型是偽泛型,這是因?yàn)?Java 在編譯期間,所有的泛型信息都會(huì)被擦掉,這也就是通常所說類型擦除 。

List<Integer> list = new ArrayList<>();

list.add(12);
//這里直接添加會(huì)報(bào)錯(cuò)
list.add("a");
Class<? extends List> clazz = list.getClass();
Method add = clazz.getDeclaredMethod("add", Object.class);
//但是通過反射添加,是可以的
add.invoke(list, "kl");

System.out.println(list);

泛型一般有三種使用方式:泛型類、泛型接口、泛型方法。

1.泛型類:

//此處T可以隨便寫為任意標(biāo)識(shí),常見的如T、E、K、V等形式的參數(shù)常用于表示泛型
//在實(shí)例化泛型類時(shí),必須指定T的具體類型
public class Generic<T> {

    private T key;

    public Generic(T key) {
        this.key = key;
    }

    public T getKey() {
        return key;
    }
}

如何實(shí)例化泛型類:


Generic<Integer> genericInteger = new Generic<Integer>(123456);

2.泛型接口 :


public interface Generator<T> {
    public T method();
}

實(shí)現(xiàn)泛型接口,不指定類型:

class GeneratorImpl<T> implements Generator<T>{
    @Override
    public T method() {
        return null;
    }
}

實(shí)現(xiàn)泛型接口,指定類型:

class GeneratorImpl implements Generator<String>{
    @Override
    public String method() {
        return "hello";
    }
}

3.泛型方法 :

public static <E> void printArray(E[] inputArray) {
    for (E element : inputArray) {
        System.out.printf("%s ", element);
    }
    System.out.println();
}

使用:

// 創(chuàng)建不同類型數(shù)組: Integer, Double 和 Character
Integer[] intArray = { 1, 2, 3 };
String[] stringArray = { "Hello", "World" };
printArray(intArray);
printArray(stringArray);

4.常用的通配符為: T,E,K,V,?

? 表示不確定的 java 類型
T (type) 表示具體的一個(gè) java 類型
K V (key value) 分別代表 java 鍵值中的 Key Value
E (element) 代表 Element
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 泛型的定義 Java 泛型(generics)是 JDK1. 5 中引入的一個(gè)新特性, 泛型提供了編譯時(shí)類型安全檢...
    安仔夏天勤奮閱讀 246評(píng)論 0 2
  • java 泛型詳解-絕對(duì)是對(duì)泛型方法講解最詳細(xì)的,沒有之一 對(duì)java的泛型特性的了解僅限于表面的淺淺一層,直到在...
    Robin132929閱讀 395評(píng)論 0 3
  • 1 泛型基礎(chǔ) 1.1 什么是泛型(Generics) 官方是這樣介紹的: JDK 5.0 introduces s...
    Eager01閱讀 283評(píng)論 0 0
  • Java 泛型是 Java 5 引入的一個(gè)重要特性,相信大多數(shù) Java 開發(fā)者都對(duì)此不陌生,但是泛型背后的實(shí)現(xiàn)原...
    JohnnyShieh閱讀 2,157評(píng)論 6 37
  • 版權(quán)申明】非商業(yè)目的附文章鏈接可自由轉(zhuǎn)載博文地址:http://www.itdecent.cn/p/fb6f33...
    shusheng007閱讀 925評(píng)論 0 0

友情鏈接更多精彩內(nèi)容