最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?9中的"菱形"語法詳解

 更新時間:2023年06月07日 15:46:04   作者:java中文網  
Java?9?再次增強了“菱形”語法,它甚至允許在創(chuàng)建匿名內部類時使用菱形語法,Java?可根據上下文來推斷匿名內部類中泛型的類型,下面程序示范了在匿名內部類中使用菱形語法,感興趣的朋友跟隨小編一起看看吧

在 Java 7 版本以前,如果使用帶泛型的接口、類定義變量,那么調用構造器創(chuàng)建對象時構造器的后面也必須帶泛型,這顯得有些多余了。例如如下兩條語句:

List<String> strList = new ArrayList<String>();
Map<String, Integer> scores = new HashMap<String, Integer>();

從 Java 7 開始,Java 允許在構造器后不帶完整的泛型信息,只要給出一對尖括號<>即可。Java 可以推斷出尖括號里應該是什么泛型信息。

即上面兩條語句可以改寫為如下形式:

List<String> strList = new ArrayList<>();
Map<String, Integer> scores = new HashMap<>();

把兩個尖括號并排放在一起非常像一個菱形,這種語法也就被稱為“菱形”語法。下面程序示范了 Java 7 的菱形語法。

public class Test {
    public static void main(String[] args) {
        // Java自動推斷出ArrayList的<>里應該是String
        List<String> names = new ArrayList<>();
        names.add("JAVA中文網Java入門教程");
        names.add("JAVA中文網Spring入門教程");
        // 遍歷names集合,集合元素就是String類型
        names.forEach(ele -> System.out.println(ele.length()));
        // Java 自動推斷出 HashMap 的<>里應該是 String,List<String>
        Map<String, List<String>> coursesInfo = new HashMap<>();
        // Java自動推斷出ArrayList的<>里應該是String
        List<String> courses = new ArrayList<>();
        courses.add("Java入門教程");
        courses.add("Python基礎教程");
        coursesInfo.put("JAVA", courses);
        // 遍歷 Map 時,Map 的 key 是 String 類型,value List<String>類型
        coursesInfo.forEach((key, value) -> System.out.println(key + "-->" + value));
    }
}

上面程序中代碼第 4、10 和 12 行代碼就是“菱形”語法的示例。從該程序不難看出,“菱形”語法對原有的泛型并沒有改變,只是更好地簡化了泛型編程。

Java 9 再次增強了“菱形”語法,它甚至允許在創(chuàng)建匿名內部類時使用菱形語法,Java 可根據上下文來推斷匿名內部類中泛型的類型。下面程序示范了在匿名內部類中使用菱形語法。

首先定義一個接口:

interface Foo<T> {
    void test(T t);
}

創(chuàng)建實現(xiàn)類:

public class AnnoymousTest {
    public static void main(String[] args) {
        // 指定Foo類中泛型為String
        Foo<String> f = new Foo<>() {
            // test()方法的參數(shù)類型為String
            public void test(String t) {
                System.out.println("test 方法的 t 參數(shù)為:" + t);
            }
        };
        // 使用泛型通配符,此時相當于通配符的上限為Object
        Foo<?> fo = new Foo<>() {
            // test()方法的參數(shù)類型為Object
            public void test(Object t) {
                System.out.println("test 方法的 Object 參數(shù)為:" + t);
            }
        };
        // 使用泛型通配符,通配符的上限為Number
        Foo<? extends Number> fn = new Foo<>() {
            // 此時test ()方法的參數(shù)類型為Number
            public void test(Number t) {
                System.out.println("test 方法的 Number 參數(shù)為:" + t);
            }
        };
    }
}

上面程序先定義了一個帶泛型聲明的接口,接下來第 4、11 和 18 行代碼分別示范了在匿名內部類中使用菱形語法。第 4行代碼聲明變量時明確地將泛型指定為 String 類型,因此在該匿名內部類中 T 類型就代表了 String 類型;第 11 行代碼聲明變量時使用通配符來代表泛型(相當于通配符的上限為 Object),因此系統(tǒng)只能推斷出 T 代表 Object,所以在該匿名內部類中 T 類型就代表了 Object 類型;第 18 行代碼聲明變量時使用了帶上限(上限是 Number)的通配符,因此系統(tǒng)可以推斷出 T 代表 Number 類。

無論以上哪種方式,Java 9 都允許在使用匿名內部類時使用菱形語法。

到此這篇關于Java 9中的“菱形”語法的文章就介紹到這了,更多相關Java 9菱形語法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 在Spring項目中引入高版本依賴并解決低版本沖突問題的解決方法

    在Spring項目中引入高版本依賴并解決低版本沖突問題的解決方法

    在Spring項目的開發(fā)過程中,依賴管理是一個非常重要且復雜的問題,我們可能需要引入更高版本的依賴來使用新特性或修復舊版本的Bug,然而,這些高版本依賴可能會與項目中已有的低版本依賴產生沖突,本文將詳細探討如何在Spring中引入高版本依賴,并解決低版本依賴沖突的問題
    2025-03-03
  • MyBatis-Plus執(zhí)行SQL分析打印過程

    MyBatis-Plus執(zhí)行SQL分析打印過程

    這篇文章主要介紹了MyBatis-Plus執(zhí)行SQL分析打印過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java 中HttpURLConnection附件上傳的實例詳解

    Java 中HttpURLConnection附件上傳的實例詳解

    這篇文章主要介紹了Java 中HttpURLConnection附件上傳的實例詳解的相關資料,希望通過本文大家能掌握這樣的知識內容,需要的朋友可以參考下
    2017-09-09
  • springboot 重定向方式(redirect前綴)

    springboot 重定向方式(redirect前綴)

    這篇文章主要介紹了springboot 重定向方式(redirect前綴),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 解析Java內存分配和回收策略以及MinorGC、MajorGC、FullGC

    解析Java內存分配和回收策略以及MinorGC、MajorGC、FullGC

    本節(jié)將會介紹一下:對象的內存分配與回收策略;對象何時進入新生代、老年代;MinorGC、MajorGC、FullGC的定義區(qū)別和觸發(fā)條件;還有通過圖示展示了GC的過程。
    2021-09-09
  • logback的LevelFilter日志過濾器源碼解讀

    logback的LevelFilter日志過濾器源碼解讀

    這篇文章主要為大家介紹了logback的LevelFilter日志過濾器源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Spring MVC注解式開發(fā)示例完整過程

    Spring MVC注解式開發(fā)示例完整過程

    這篇文章主要介紹了Spring MVC注解式開發(fā)示例完整過程,MVC注解式開發(fā)即處理器基于注解的類開發(fā),對于每一個定義的處理器,無需在xml中注冊,只需在代碼中通過對類與方法的注解,即可完成注冊
    2023-02-02
  • java括號匹配問題介紹

    java括號匹配問題介紹

    大家好,本篇文章主要講的是java括號匹配問題介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Java簡單冒泡排序示例解析

    Java簡單冒泡排序示例解析

    這篇文章主要介紹了Java簡單冒泡排序示例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • 使用java實現(xiàn)備份和恢復SQLServer表數(shù)據

    使用java實現(xiàn)備份和恢復SQLServer表數(shù)據

    這篇文章主要為大家詳細介紹了如何使用java實現(xiàn)備份和恢復SQLServer表數(shù)據,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01

最新評論

牟定县| 宁阳县| 柞水县| 武功县| 九寨沟县| 密云县| 昔阳县| 永康市| 馆陶县| 鄂托克前旗| 彭阳县| 吉林省| 中西区| 攀枝花市| 南岸区| 黑龙江省| 连城县| 高碑店市| 拜城县| 利辛县| 罗城| 呈贡县| 三台县| 南华县| 淄博市| 四子王旗| 韩城市| 太康县| 明光市| 大同市| 平原县| 清镇市| 呈贡县| 海原县| 昌吉市| 潜山县| 奉新县| 新干县| 远安县| 进贤县| 洪湖市|