Java泛型類的定義和使用

Java泛型是指編寫的代碼可以用於不同類型的對象,在編譯時被檢查的編程機制。Java泛型類在定義和使用上相對簡單,但仍然需注意一些技巧和規則。

一、泛型類的定義

泛型類可以定義在類名後面的尖括弧里,用於限定類中的變數類型。對於泛型類,需要注意以下幾點:

1、泛型類的類型參數

泛型類的類型參數定義在類名後面的尖括弧內。泛型類的類型參數可以有多個,它們之間用逗號分隔。類型參數可以在類中任意使用,作為類型變數使用,可以作為屬性類型、方法參數類型、方法返回類型等。

public class GenericsClass<T, U> { 
    private T obj1; 
    private U obj2; 
     
    public GenericsClass(T obj1, U obj2) { 
        this.obj1 = obj1; 
        this.obj2 = obj2; 
    } 

    public T getObj1() { 
        return obj1; 
    } 

    public U getObj2() { 
        return obj2; 
    } 
} 

2、在實例化泛型類時指定類型參數

在實例化泛型類時需要指定類型參數,即使只有一個類型參數也要加上尖括弧。當實例化泛型類時,所有的T類型都將被具體的類型替換。

GenericsClass<Integer, String> obj = new GenericsClass<Integer, String>(100, "Guru99");

二、使用泛型類

泛型類可以像普通類一樣使用。但是,由於可以指定不同的參數類型,因此可以更靈活地使用方法和屬性。以下是使用泛型類的示例:

public class Main { 
    public static void main(String[] args) { 
        GenericsClass<Integer, String> obj = new GenericsClass<Integer, String>(100, "Guru99"); 
        System.out.println(obj.getObj1()); 
        System.out.println(obj.getObj2()); 
    } 
}

上面的代碼輸出結果為:

100

Guru99

三、泛型方法的定義和使用

泛型方法是指定義時帶有類型參數的方法。泛型方法和泛型類一樣,可以用於處理多種類型的數據。以下是使用泛型方法的示例:

1、定義泛型方法

泛型方法中的參數類型不是固定的,而是動態的。定義泛型方法時,需要在方法的返回類型前放置類型參數聲明。當調用泛型方法時,可以在方法名前指定類型參數或自動推斷類型參數。

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

2、使用泛型方法

不像普通方法一樣,泛型方法需要在調用時指定類型參數,或可以被自動推斷。下面是使用泛型方法的示例:

public class Main { 
    public static void main(String[] args) { 
        Integer[] intArray = { 1, 2, 3, 4, 5 }; 
        Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 }; 
        Character[] charArray = { 'H', 'E', 'L', 'L', 'O' }; 

        GenericsMethod genericsMethod = new GenericsMethod(); 
        System.out.println("Array integerArray contains:"); 
        genericsMethod.printArray(intArray); 
          
        System.out.println("\nArray doubleArray contains:"); 
        genericsMethod.printArray(doubleArray); 
          
        System.out.println("\nArray characterArray contains:"); 
        genericsMethod.printArray(charArray); 
    } 
}

上面的代碼輸出結果為:

Array integerArray contains:

1 2 3 4 5

Array doubleArray contains:

1.1 2.2 3.3 4.4

Array characterArray contains:

H E L L O

四、通配符

通配符(Wildcard)是一種類型參數,用於表示「任意類型」。可以在方法的參數中使用通配符,以增加參數的靈活性。可以使用「?」代替具體的類型,如「List」。

以下是使用通配符的示例:

public class GenericsWildcard { 
    public static double sumList(List<? extends Number> list) { 
        double sum = 0.0; 
        for (Number i : list) { 
            sum += i.doubleValue(); 
        } 
        return sum; 
    } 
}

通過使用通配符,可以處理不同的類型,例如:

public class Main { 
    public static void main(String[] args) { 
        List<Integer> intList = Arrays.asList(1, 2, 3); 
        List<Double> doubleList = Arrays.asList(1.2, 2.3, 3.4); 

        System.out.println("The sum of the integer list is " + GenericsWildcard.sumList(intList)); 
        System.out.println("The sum of the double list is " + GenericsWildcard.sumList(doubleList)); 
    } 
}

上面的代碼輸出結果為:

The sum of the integer list is 6.0

The sum of the double list is 6.9

原創文章,作者:XPOO,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/148825.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XPOO的頭像XPOO
上一篇 2024-11-04 17:48
下一篇 2024-11-04 17:48

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29

發表回復

登錄後才能評論