国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - Java8新特性之泛型的目標類型推斷_動力節點Java學院整理

Java8新特性之泛型的目標類型推斷_動力節點Java學院整理

2020-11-11 16:27動力節點 JAVA教程

泛型是Java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。下面通過本文給分享Java8新特性之泛型的目標類型推斷,感興趣的朋友參考下吧

簡單理解泛型

泛型是Java SE 1.5的新特性,泛型的本質是參數化類型,也就是說所操作的數據類型被指定為一個參數。通俗點將就是“類型的變量”。這種類型變量可以用在類、接口和方法的創建中。

理解Java泛型最簡單的方法是把它看成一種便捷語法,能節省你某些Java類型轉換(casting)上的操作:

?
1
2
List<Apple> box = new ArrayList<Apple>();
box.add(new Apple());Apple apple =box.get(0);

上面的代碼自身已表達的很清楚:box是一個裝有Apple對象的List。get方法返回一個Apple對象實例,這個過程不需要進行類型轉換。沒有泛型,上面的代碼需要寫成這樣:

?
1
Apple apple = (Apple)box.get(0);

泛型的尷尬

泛型的最大優點是提供了程序的類型安全同時可以向后兼容,但也有尷尬的地方,就是每次定義時都要寫明泛型的類型,這樣顯示指定不僅感覺有些冗長,最主要是很多程序員不熟悉泛型,因此很多時候不能夠給出正確的類型參數,現在通過編譯器自動推斷泛型的參數類型,能夠減少這樣的情況,并提高代碼可讀性。

java7的泛型類型推斷改進

在以前的版本中使用泛型類型,需要在聲明并賦值的時候,兩側都加上泛型類型。例如:

?
1
Map<String, String> myMap = new HashMap<String, String>();

你可能覺得:老子在聲明變量的的時候已經指明了參數類型,為毛還要在初始化對象時再指定?幸好,在Java SE 7中,這種方式得以改進,現在你可以使用如下語句進行聲明并賦值:

?
1
Map<String, String> myMap = new HashMap<>(); //注意后面的"<>"

在這條語句中,編譯器會根據變量聲明時的泛型類型自動推斷出實例化HashMap時的泛型類型。再次提醒一定要注意new HashMap后面的“<>”,只有加上這個“<>”才表示是自動類型推斷,否則就是非泛型類型的HashMap,并且在使用編譯器編譯源代碼時會給出一個警告提示。

但是:Java SE 7在創建泛型實例時的類型推斷是有限制的:只有構造器的參數化類型在上下文中被顯著的聲明了,才可以使用類型推斷,否則不行。例如:下面的例子在java 7無法正確編譯(但現在在java8里面可以編譯,因為根據方法參數來自動推斷泛型的類型):

?
1
2
3
List<String> list = new ArrayList<>();
list.add("A");// 由于addAll期望獲得Collection<? extends String>類型的參數,因此下面的語句無法通過
list.addAll(new ArrayList<>());

Java8的泛型類型推斷改進

java8里面泛型的目標類型推斷主要2個:

1.支持通過方法上下文推斷泛型目標類型

2.支持在方法調用鏈路當中,泛型類型推斷傳遞到最后一個方法

讓我們看看官網的例子

?
1
2
3
4
5
class List<E> {
  static <Z> List<Z> nil() { ... };
  static <Z> List<Z> cons(Z head, List<Z> tail) { ... };
  E head() { ... }
}

   根據JEP101的特性,我們在調用上面方法的時候可以這樣寫

?
1
2
3
4
5
6
7
8
//通過方法賦值的目標參數來自動推斷泛型的類型
List<String> l = List.nil();
//而不是顯示的指定類型
//List<String> l = List.<String>nil();
//通過前面方法參數類型推斷泛型的類型
List.cons(42, List.nil());
//而不是顯示的指定類型
//List.cons(42, List.<Integer>nil());

總結

以上是JEP101的特性內容了,Java作為靜態語言的代表者,可以說類型系統相當豐富。導致類型間互相轉換的問題困擾著每個java程序員,通過編譯器自動推斷類型的東西可以稍微緩解一下類型轉換太復雜的問題。 雖然說是小進步,但對于我們天天寫代碼的程序員,肯定能帶來巨大的作用,至少心情更愉悅了~~說不定在java 9里面,我們會得到一個通用的類型var,像js或者scala的一些動態語言那樣^_^

延伸 · 閱讀

精彩推薦
  • JAVA教程Java性能調優概述

    Java性能調優概述

    本文介紹了Java程序性能的主要表現點、衡量程序性能的主要指標、性能調優的層次、基本調優策略和手段等,具有很好的參考價值,下面跟著小編一起來看...

    九朗的碼農生活4502020-08-03
  • JAVA教程JavaWeb項目實現文件上傳動態顯示進度實例

    JavaWeb項目實現文件上傳動態顯示進度實例

    本篇文章主要介紹了JavaWeb項目實現文件上傳動態顯示進度實例,具有一定的參考價值,有興趣的可以了解一下。 ...

    DongXv1762020-09-10
  • JAVA教程淺談fastjson的常用使用方法

    淺談fastjson的常用使用方法

    下面小編就為大家帶來一篇淺談fastjson的常用使用方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian5302020-06-07
  • JAVA教程Java Web中解決路徑(絕對路徑與相對路徑)問題

    Java Web中解決路徑(絕對路徑與相對路徑)問題

    這篇文章主要介紹了Java Web中解決路徑問題的相關資料,java 文件路徑有絕對路徑與相對路徑,這里提供了幾種方法解決所有路徑問題,需要的朋友可以參考...

    java教程網4902020-07-23
  • JAVA教程Java基于Socket實現網絡編程實例詳解

    Java基于Socket實現網絡編程實例詳解

    本文主要給大家介紹的是Java基于Socket實現網絡編程的實例,并給大家介紹了TCP與UDP傳輸協議,有需要的小伙伴可以來參考下 ...

    lqh5162020-05-24
  • JAVA教程Java關鍵字instanceof用法及實現策略

    Java關鍵字instanceof用法及實現策略

    instanceof 運算符是用來在運行時判斷對象是否是指定類及其父類的一個實例。這篇文章主要介紹了Java關鍵字instanceof用法解析,需要的朋友可以參考下 ...

    YSOcean3702020-08-04
  • JAVA教程基于Java 談回調函數

    基于Java 談回調函數

    回調函數就是一個通過函數指針調用的函數。如果你把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用來調用其所 指向的函數時,我們就...

    hackeris1462020-10-23
  • JAVA教程java的arrays數組排序示例分享

    java的arrays數組排序示例分享

    排序算法,基本的高級語言都有一些提供。C語言有qsort()函數,C++有sort()函數,java語言有Arrays類(不是Array)。用這些排序時,都可以寫自己的排序規則 ...

    java教程網4622019-11-11
主站蜘蛛池模板: 中日韩午夜理伦电影免费 | 日韩和欧美一区二区 | 亚洲国产成人精品女 | 久久性 | 精品国产一区二区三区久久久蜜 | 国产综合久久久 | 亚洲 欧美 另类 综合 偷拍 | 依人在线免费视频 | 精品国产欧美一区二区三区成人 | 在线a免费 | 天天插天天操 | 毛片网站大全 | 色爱区成人综合网 | 一区二区不卡视频 | 欧美成人综合 | 久草视频在线播放 | 日韩在线观看中文字幕 | 国产一区二区三区久久久久久久久 | 亚洲精品一二区 | 人人超碰免费 | 中日韩av| 日韩av在线免费 | 日韩免费观看视频 | 亚洲永久免费视频 | 91精品国产一区二区三区 | 午夜电影网 | 久久久国产精品一区 | 免费黄色在线观看 | 日韩在线中文 | 欧美精品91 | 久久久久久久久久影院 | 亚洲高清视频一区二区 | 色婷婷久久一区二区三区麻豆 | 久久亚洲欧美日韩精品专区 | 中文字幕视频在线观看 | 成人涩涩日本国产一区 | 久久久久9999国产精品 | 日韩免费在线观看 | 成年人在线观看免费视频 | 91免费在线视频 | 欧美激情一区二区三区 |