国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

深入理解Java泛型:靈活、安全、可重用的編程利器

這篇具有很好參考價值的文章主要介紹了深入理解Java泛型:靈活、安全、可重用的編程利器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Java泛型是一項強大的編程特性,為程序員提供了一種靈活、類型安全、可重用的編碼方式。通過泛型,我們能夠編寫更加通用、適應(yīng)多種數(shù)據(jù)類型的代碼,從而提高了代碼的靈活性和可維護性。在這篇博客中,我們將深入探討Java泛型的各個方面,并通過具體的例子來展示其用法和優(yōu)勢。

1. 泛型類和泛型方法

在以下代碼中,printArray 方法使用了泛型類型參數(shù) T,允許我們在運行時指定具體的類型。這種方式使得我們可以編寫通用的方法來處理不同類型的數(shù)組。


public class Print {
    /**
     * 打印數(shù)組
     * @param inputArray
     * @param <T>
     */
    public static <T> void printArray(T[] inputArray) {
        for (T element : inputArray) {
            System.out.printf("%s ", element);
        }
        System.out.println();
    }

    /**
     * 打印整數(shù)數(shù)組
     * @param inputArray
     */
    public static void IntPrintArray(Integer[] inputArray) {
        for (Integer element : inputArray) {
            System.out.printf("%s ", element);
        }
        System.out.println();
    }
    /**
     * 打印字符串數(shù)組
     * @param inputArray
     */
    public static void StrPrintArray(String[] inputArray) {
        for (String element : inputArray) {
            System.out.printf("%s ", element);
        }
        System.out.println();
    }
}

然后,我們通過一個示例程序 Method01 來展示泛型方法的應(yīng)用:

/**
 * @ClassName: Method01
 * @Description: 方法1 感受泛型的好處,泛型方法
 * @Author: liu
 * @Date: 2024-03-09
 * @Version: 1.0
 **/
public class Method01 {
    public static void main(String[] args) {
        String[] stringArray = {"Hello", "World"};
        Integer[] integerArray = {1, 2, 3, 4, 5};

        System.out.println("字符串數(shù)組包含:");
        //StringPrint方法
        Print.StrPrintArray(stringArray);
        //編譯失敗 類型不一致
        //Print.StrPrintArray(integerArray);
        //泛型方法
        Print.printArray(stringArray);

        System.out.println("\n整數(shù)數(shù)組包含:");
        //IntegerPrint方法
        Print.IntPrintArray(integerArray);
        //編譯失敗 類型不一致
        //Print.IntPrintArray(stringArray);
        //泛型方法,提高代碼可用性
        Print.printArray(integerArray);
        System.out.println("\n整數(shù)數(shù)組包含:");
        Object[] objectArray = {1, 2, 3, 4, 5, "Hello", "World"};
        Print.printArray(objectArray);
    }
}

在上述示例中,我們調(diào)用了 printArray 方法,分別傳遞了字符串數(shù)組和整數(shù)數(shù)組。由于泛型的存在,我們能夠使用相同的方法處理不同類型的數(shù)據(jù),提高了代碼的可重用性。

深入理解Java泛型:靈活、安全、可重用的編程利器,Java功能實現(xiàn),Java理論知識分享,java,安全,intellij-idea,jvm

再舉個例子

/**
 * @ClassName: Method03
 * @Description: 方法3 可以存儲任意類型的數(shù)據(jù)
 * @Author: liu
 * @Date: 2024-03-09
 * @Version: 1.0
 **/
public class Method3 {
    public static void main(String[] args) {
        // 創(chuàng)建一個存儲整數(shù)的 Box 實例
        Box<Integer> integerBox = new Box<>();
        integerBox.setValue(42);
        System.out.println("Integer Value: " + integerBox.getValue());

        // 創(chuàng)建一個存儲字符串的 Box 實例
        Box<String> stringBox = new Box<>();
        stringBox.setValue("Hello, Generics!");
        System.out.println("String Value: " + stringBox.getValue());

        // 創(chuàng)建一個存儲布爾值的 Box 實例
        Box<Boolean> booleanBox = new Box<>();
        booleanBox.setValue(true);
        System.out.println("Boolean Value: " + booleanBox.getValue());
    }
}
@Data
class Box<T> {
    private T value;
}

深入理解Java泛型:靈活、安全、可重用的編程利器,Java功能實現(xiàn),Java理論知識分享,java,安全,intellij-idea,jvm

2. 泛型上限和下限通配符

首先,讓我們來看一個簡單的泛型類和泛型方法的例子??紤]到動物(Animals)和貓(Cat)、狗(Dog)的實體類:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Animals {
    public String name;
    public Integer age;
}

@Data
public class Cat {
    public String name;
    public Integer age;
    public Say say;

    public Cat(String name, Integer age, Say say) {
        this.name = name;
        this.age = age;
        this.say = say;
        System.out.println("Cat的全參構(gòu)造執(zhí)行,貓邊唱歌吃魚");
    }

    public Cat() {
        System.out.println("Cat的無參構(gòu)造執(zhí)行,你創(chuàng)建了貓,卻一笑而過!");
    }
}

@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Dog extends Animals {
    public String name;
    public Integer age;
}

@Data
public class Say {
    public String say;

    public Say(String say) {
        this.say = say;
        System.out.println("說話" + say);
    }
}

接下來,我們將介紹泛型上限和下限通配符的概念,并通過例子 Method02 進行演示。

/**
 * @ClassName: Method02
 * @Description: 方法2, 泛型上限和下限通配符
 * @Author: liu
 * @Date: 2024-03-09
 * @Version: 1.0
 **/
public class Method02 {
    public static void main(String[] args) {
/*        Cat cat = new Cat();
        Dog dog1 = new Dog("旺財", 3);
        Cat cat1 = new Cat("小花", 2, new Say("喵喵喵"));
        Animals animal1 = new Animals("小動物", 1);
        List<Dog> dogList = new ArrayList<>();
        List<Cat> catList = new ArrayList<>();
        List<Animals> animalsList = new ArrayList<>();
        animalsList.add(animal1);
        dogList.add(dog1);
        catList.add(cat1);*/

        // 使用菱形操作符和雙括號初始化簡化代碼
        // 在匿名內(nèi)部類中,Java 并不允許使用 <> 進行菱形操作符的類型推斷,還可以使用 Arrays.asList() 方法

        List<Dog> dogList = new ArrayList<Dog>(){
            private static final long serialVersionUID = -3322276720822396481L;

            {
            add(new Dog("狗王", 2));
            add(new Dog("狗王后", 3));
        }};
        List<Cat> catList = Arrays.asList(
                new Cat("貓王", 1, new Say("喵~")),
                new Cat()
        );
        List<Animals> animalsList = new ArrayList<Animals>(){
            private static final long serialVersionUID = 1L;
            {
            add(new Animals("小動物", 1));

        }};
        //reason: no instance(s) of type variable(s) exist so that Cat conforms to Animals
        //extendMethod(catList);// 編譯報錯
        // 泛型方法調(diào)用示例
        extendMethod(dogList);  // 合法,List<Dog> 是 List<? extends Animals> 的子類
        extendMethod(animalsList);  // 合法,List<Animals> 是 List<? extends Animals> 的子類

        System.out.println("=====================================");

        superMethod(dogList);  // 合法
        //編譯報錯,List<Cat> 不是 List<? super Dog> 的子類
        //superMethod(catList);
        //編譯合法,運行報錯UnsupportedOperationException
        //superMethod(Collections.unmodifiableList(catList));
        superMethod(animalsList);  // 合法
    }

    public static <T extends Animals> void extendMethod(List<T> list) {
        // 在這里處理只包含數(shù)字類型及其子類的列表
        for (T element : list) {
            System.out.println(element);
        }
    }
    public static void superMethod(List<? super Dog> list) {
        // 在這里處理只包含數(shù)字類型及其父類的列表
        list.add(new Dog("二狗", 2));
        //list.add(new Animals("Buddy", 2)); // 編譯報錯
        for (Object element : list) {
            System.out.println(element);
        }
    }
}

在上述代碼中,extendMethod 方法接受一個泛型列表,其中的元素必須是 Animals 類型或其子類。而 superMethod 方法則接受一個泛型列表,其中的元素必須是 Dog 類型或其父類。這樣的靈活性使得我們能夠?qū)Σ煌瑢哟蔚念愡M行處理。

Method02 的示例程序中,我們演示了泛型上限和下限通配符的使用:

在這個示例中,我們展示了如何使用泛型上限和下限通配符來處理不同類型的列表,使得我們的代碼更具通用性和靈活性。

深入理解Java泛型:靈活、安全、可重用的編程利器,Java功能實現(xiàn),Java理論知識分享,java,安全,intellij-idea,jvm

3. 靈活處理多個泛型參數(shù)

在實際的編程場景中,有時我們需要處理多個泛型參數(shù)的情況。在這個章節(jié),將探討如何在Java中靈活地處理多個泛型參數(shù),以滿足更為復(fù)雜的編碼需求。

代碼如下:


/**
 * @ClassName: Method04
 * @Description: 演示帶有多個泛型參數(shù)的Pair類的使用
 * @Author: 阿水
 * @Date: 2024-03-10
 * @Version: 1.0
 **/
public class Method04 {
    public static void main(String[] args) {
        // 創(chuàng)建一個帶有泛型參數(shù)的Pair實例
        Pair<Dog, Cat> pair = new Pair<>();
        // 創(chuàng)建狗和貓的實例
        Dog dog = new Dog("旺財", 3);
        Cat cat = new Cat("小花", 2, new Say("喵喵喵"));
        // 設(shè)置Pair實例的值
        pair.setFirst(dog);
        pair.setSecond(cat);
        // 打印Pair實例的字符串表示形式以及其中的元素
        System.out.println(pair);
        System.out.println("First Element: " + pair.getFirst().getName());
        System.out.println("Second Element: " + pair.getSecond().getName());
        // 創(chuàng)建帶有不同泛型參數(shù)的兩個Pair實例
        Pair<String, Integer> pair1 = new Pair<>("One", 1);
        Pair<Double, String> pair2 = new Pair<>(6.66, "Pi");
        // 調(diào)用泛型方法打印Pair實例的值
        printPair(pair1);
        printPair(pair2);

    }

    /**
     * 打印帶有泛型參數(shù)的Pair實例的值
     *
     * @param pair 帶有泛型參數(shù)的Pair實例
     * @param <T>  第一個元素的類型
     * @param <U>  第二個元素的類型
     */
    public static <T, U> void printPair(Pair<T, U> pair) {
        System.out.println("Pair: " + pair.getFirst() + ", " + pair.getSecond());
    }
}

/**
 * @ClassName: Pair
 * @Description: 帶有兩個泛型參數(shù)的Pair類
 * @Author: 阿水
 * @Date: 2024-03-10
 * @Version: 1.0
 **/
@Data
@AllArgsConstructor
@NoArgsConstructor
class Pair<T, U> {
    private T first;
    private U second;
}

運行結(jié)果如下:

深入理解Java泛型:靈活、安全、可重用的編程利器,Java功能實現(xiàn),Java理論知識分享,java,安全,intellij-idea,jvm

4.總結(jié)

Java泛型是一項強大的編程特性,通過泛型類和泛型方法,我們能夠編寫通用、靈活的代碼。同時,泛型上限和下限通配符使得我們能夠更好地處理不同層次的類。通過這篇博客,我們深入理解了Java泛型的靈活性、安全性和可重用性,為我們的編程工作提供了更多的便利和可能性。文章來源地址http://www.zghlxwxcb.cn/news/detail-842132.html

到了這里,關(guān)于深入理解Java泛型:靈活、安全、可重用的編程利器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 深入理解Java泛型、協(xié)變逆變、泛型通配符、自限定

    深入理解Java泛型、協(xié)變逆變、泛型通配符、自限定

    重寫了之前博客寫的泛型相關(guān)內(nèi)容,全部整合到這一篇文章里了,把坑都填了,后續(xù)不再糾結(jié)這些問題了。本文深度總結(jié)了函數(shù)式思想、泛型對在Java中的應(yīng)用,解答了許多比較難的問題。 純函數(shù) 協(xié)變 逆變 泛型通配符 PECS法則 自限定 Java8 引入了函數(shù)式接口,從此方法傳參可

    2023年04月20日
    瀏覽(25)
  • 「Java」《深入解析Java多線程編程利器:CompletableFuture》

    多線程編程是指在一個程序中同時執(zhí)行多個線程來提高系統(tǒng)的并發(fā)性和響應(yīng)性。在現(xiàn)代計算機系統(tǒng)中,多線程編程已經(jīng)成為開發(fā)者日常工作的一部分。以下是對多線程編程需求和挑戰(zhàn)的介紹: 需求: 提高系統(tǒng)的性能:通過同時執(zhí)行多個線程,可以利用多核處理器的優(yōu)勢,實

    2024年02月11日
    瀏覽(25)
  • Java泛型:靈活多變的類型參數(shù)化工具

    Java泛型:靈活多變的類型參數(shù)化工具

    ??專欄內(nèi)容:Java ?個人主頁:子夜的星的主頁 ??座右銘:前路未遠,步履不停 在傳統(tǒng)的編程方法中,類和方法通常被限定為使用特定的類型。這些類型可能是基礎(chǔ)的數(shù)據(jù)類型(如整數(shù)、字符等),或者是由程序員自己定義的復(fù)雜類型。這種方式在處理單一類型數(shù)據(jù)時很有

    2024年02月01日
    瀏覽(19)
  • 深入理解Java多線程編程

    ? ??????Java的多線程編程在現(xiàn)代應(yīng)用程序中扮演著重要的角色。它可以提高應(yīng)用程序的性能、并發(fā)處理能力和響應(yīng)性。然而,多線程編程也帶來了一些挑戰(zhàn),如線程安全、死鎖和資源競爭等問題。本文將深入探討Java多線程編程的基本概念和最佳實踐。 1. 理解線程和進程

    2024年02月08日
    瀏覽(35)
  • VLAN——提高網(wǎng)絡(luò)性能、安全性和靈活性的利器

    VLAN是Virtual Local Area Network的縮寫,它是一種通過網(wǎng)絡(luò)交換機虛擬劃分局域網(wǎng)的技術(shù)。VLAN可以將一個物理局域網(wǎng)劃分成多個邏輯上的虛擬局域網(wǎng),各個虛擬局域網(wǎng)之間相互獨立,彼此隔離,進而提高網(wǎng)絡(luò)性能、靈活性和安全性。本文將為大家介紹VLAN的工作原理、優(yōu)點及應(yīng)用場

    2024年02月07日
    瀏覽(29)
  • “深入理解Java的多線程編程“

    多線程編程是指在一個程序中同時運行多個線程,以提高程序的并發(fā)性和性能。Java是一門支持多線程編程的強大編程語言,提供了豐富的多線程相關(guān)類和接口。 在Java中,可以通過以下方式實現(xiàn)多線程編程: 繼承Thread類:創(chuàng)建一個繼承自Thread類的子類,并重寫run()方法,在

    2024年02月13日
    瀏覽(54)
  • Java網(wǎng)絡(luò)編程-深入理解BIO、NIO

    Java網(wǎng)絡(luò)編程-深入理解BIO、NIO

    BIO BIO 為 Blocked-IO(阻塞 IO),在 JDK1.4 之前建立網(wǎng)絡(luò)連接時,只能使用 BIO 使用 BIO 時,服務(wù)端會對客戶端的每個請求都建立一個線程進行處理,客戶端向服務(wù)端發(fā)送請求后,先咨詢服務(wù)端是否有線程響應(yīng),如果沒有就會等待或者被拒絕 BIO 基本使用代碼: 服務(wù)端: 客戶端:

    2024年02月04日
    瀏覽(24)
  • java中的方法返回值使用泛型,實現(xiàn)靈活的返回值類型

    ??使用Mybatis框架的時候,想封裝一個底層JDBC控制器,用于提供和Mybatis交互的增刪改查接口(公用的接口),但由于公用的查詢方法可能是用戶自定義的任意一個和表對應(yīng)的java bean類型,所以要考慮怎么樣給調(diào)用者返回正確的返回值類型,不需要調(diào)用者自己強轉(zhuǎn)型的動作(例

    2024年02月06日
    瀏覽(19)
  • [AIGC] 深入理解Java并發(fā)編程:從入門到進階

    在計算機領(lǐng)域中,針對多核處理器的高并發(fā)需求,Java并發(fā)編程成為了一項重要的技能。Java提供了豐富的并發(fā)編程工具和API,使得開發(fā)者能夠有效地利用多核處理器的優(yōu)勢。本文將介紹Java并發(fā)編程的基礎(chǔ)概念、常用技術(shù)和最佳實踐,幫助讀者深入理解Java并發(fā)編程。 線程和進

    2024年01月21日
    瀏覽(45)
  • 【并發(fā)編程】深入理解Java并發(fā)之synchronized實現(xiàn)原理

    【并發(fā)編程】深入理解Java并發(fā)之synchronized實現(xiàn)原理

    分析: 通過 new MyThread() 創(chuàng)建了一個對象 myThread ,這時候堆中就存在了共享資源 myThread ,然后對 myThread 對象創(chuàng)建兩個線程,那么thread1線程和thread2線程就會共享 myThread 。 thread1.start() 和 thead2.start() 開啟了兩個線程,CPU會隨機調(diào)度這兩個線程。假如 thread1 先獲得 synchronized 鎖,

    2024年02月04日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包