Java 7的類型推斷

每個優秀的程序員都喜歡編寫簡潔但有效且經過優化的代碼。 類型推斷是JDK 7中引入的一種方法,它肯定會為您帶來更少鍵入的好處。 您以以下方式使用Java代碼已有很長時間了。

但是,在初始化Collections的特定實現時,您是否曾經想到過代碼重復? 為什么在初始化期間需要兩次寫入參數?

List<string> names = new ArrayList<string>();
Map<string, Object> objectMap = new HashMap<string, Object>();
現在,大多數人都將考慮像在以前的JDK版本中一樣將其初始化為原始類型。

這樣的東西。

List<string> names = new ArrayList();
Map<string, object=""> objectMap = new HashMap();

那么JDK 7中有什么新功能? 您將從新功能中獲得什么好處?
因此,首先我們需要了解原始類型和通用類型初始化之間的區別。

這樣的語句可確保實現包含初始化期間指定的相同參數。

List<string> names = new ArrayList<string>();

在以下示例中,編譯器生成未經檢查的轉換警告,因為HashMap()構造函數引用的是HashMap原始類型,而不是Map<String, List<String>>類型:

Map<String, List<String>> myMap = new HashMap(); // unchecked conversion warning

鉆石算子
?
好的,現在我將介紹JDK 7的新功能。 因此,JDK 7中有一個稱為Diamond運算符的東西,它可以減少初始化時的額外鍵入。

句法:

List<string> names = new ArrayList<>();

因此,它不僅減少了您的代碼,而且確保了類型檢查。
這是一個更清晰的示例,解釋了類型推斷的好處。

高級示例:

class Demo {
void printStudentNames(List<string> names) {
for(String name:names) {
System.out.println("String name:"+name);
}
}public static void main(String[] args) {
Demo demo = new Demo();
demo.printStudentNames(new ArrayList<>());   // It saved typing here in a method call too.
List<string> names = new ArrayList<>();
printStudentNames(names);
List<string> copyOfNames = new ArrayList<>(names);  // It saved typing here in a copy contructor invocation too.
}
}

現在有什么限制?
如果您使用通配符,它??將不起作用。

像這樣

Class Tree<t> {public void demoFunction(List<t> objList) {
List<t> copyOfNames = new ArrayList<t>(objList);   //This is not gonna work.
}
}

在上述情況下,在復制構造函數中傳遞的參數應為Collection <? 擴展T>
因此它不會接受上述推斷類型。

參考: 為什么我們需要Java 7中的類型推斷? 來自我們的JCG合作伙伴 Saurab Parakh在Coding is Cool博客上。


翻譯自: https://www.javacodegeeks.com/2012/05/type-inference-from-java-7.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372278.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python實現膠囊網絡_膠囊網絡 -- Capsule Networks

膠囊網絡是 vector in vector out的結構&#xff0c;最后對每個不同的類別&#xff0c;輸出不一個向量&#xff0c;向量的模長表示屬于該類別的概率。例如&#xff0c;在數字識別中&#xff0c;兩個數字雖然重疊在一起&#xff0c;Capsule中的兩個向量能完整表達兩個數字的特征…

基變換與過渡矩陣

取定線性空間的一組基&#xff0c;任何一組向量可以表示為基向量的線性組合&#xff0c;且是同構映射。兩個線性空間是同構。 不同的基向量&#xff0c;基向量之間的過渡矩陣 取線性空間的兩組基任一向量可以表示為這兩組向量的線性組合將一組基向量表示為另外基向量的線性組合…

bootstrap的滾動監聽

<!DOCTYPE html> <html lang"zh-cn"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1,maximum-scale1, user-scalableno"><title>下拉菜單和滾動監…

java構造函數_JAVA的構造函數是怎么寫的。萬分感謝。路過的請不要嘲笑%_%

展開全部JAVA的構造函數是&#xff1a;SetLocal EnableDelayedExpansionset classpath.for %%c in (lib\*.jar) do set classpath!32313133353236313431303231363533e59b9ee7ad9431333431363030classpath!;%%cset classpath%classpath%;./classes;java com.ham.server.Server。…

在Spring中使用Redis

隨著NoSQL解決方案在許多問題上越來越受歡迎&#xff0c;現代項目越來越多地考慮使用一些&#xff08;或幾種&#xff09;NoSQL代替&#xff08;或并排&#xff09;傳統RDBMS。 我已經在本 &#xff0c; 本和本文章中介紹了我在MongoDB上的經驗。 在本文中&#xff0c;我想對Re…

C# 中winform的一些屬性設置

1 窗體的大小固定住&#xff0c;不能調整其大小 窗體FormBorderStyle 屬性設置為 FixedSingle; MaximizeBox 屬性設置為false; MinimizeBox 屬性設置為 false; 2. 在狀態欄中無圖標顯示 設置為fase即可。 3. 設置窗體的啟動位置 方法1&#xff0c; 用代碼控制 this.Location …

LiveBos---按鈕成下拉

轉載于:https://www.cnblogs.com/luhanzhen/p/6802779.html

Solr:創建拼寫檢查器

在上一篇文章中&#xff0c;我談到了Solr Spellchecker的工作原理&#xff0c;然后向您展示了其性能的一些測試結果。 現在&#xff0c;我們將看到另一種拼寫檢查方法。 與其他方法一樣&#xff0c;此方法使用兩步過程。 相當快速的“候選單詞”選擇&#xff0c;然后對這些單詞…

linux修改機器名稱

1 使用hostname命令&#xff1a;hostname 新機器名稱 2 修改vi /etc/sysconfig/network # cat /etc/sysconfig/network NETWORKINGyes HOSTNAMElocalhost.localdomain 注意&#xff1a;左側都必須大寫&#xff0c;等號附件沒有空格。 查看機器名稱使用hostname命令 轉載于:h…

java property_property在Java中的用法

展開全部在項目中經常用到各種配置文件62616964757a686964616fe78988e69d8331333337623561&#xff0c;有.properties的&#xff0c;也有.xml格式的都可以通過java.utils.Property類進行處理。1. 讀取.properties文件File pFile new File("test.properties");FileIn…

Django 和 html

下面是對應的形式&#xff0c;自定義的forms 轉載于:https://www.cnblogs.com/kilen/p/6804047.html

Grails動態下拉菜單

最近&#xff0c;我有一個UI要求&#xff0c;客戶希望從兩個單獨的下拉列表中選擇值。 第一個下拉列表的值實質上過濾了第二個下拉列表的值。 鑒于我們支持的財務項目對UI的要求并不嚴格&#xff0c;因此我不得不進行一些初步的學習和實驗&#xff0c;以實現良好的實施。 這篇博…

【Java大系】Java快速教程

感謝原作者&#xff1a;Vamei 出處&#xff1a;http://www.cnblogs.com/vamei Java是面向對象語言。這門語言其實相當年輕&#xff0c;于1995年才出現&#xff0c;由Sun公司出品。James Gosling領導了Java的項目小組。該項目的最初只想為家電設計一門容易移植的語言。然而&am…

[轉]前端構建工具gulpjs的使用介紹及技巧

本文轉自&#xff1a;http://www.cnblogs.com/2050/p/4198792.html gulpjs是一個前端構建工具&#xff0c;與gruntjs相比&#xff0c;gulpjs無需寫一大堆繁雜的配置參數&#xff0c;API也非常簡單&#xff0c;學習起來很容易&#xff0c;而且gulpjs使用的是nodejs中stream來讀取…

Eclipse側邊欄Outline設置字體

Eclipse的Outline&#xff0c;Project Explorer&#xff0c;Call Hierarchy等小窗口是很方便的功能&#xff0c;但是遇到函數名或文件名很長的情況&#xff0c;就只能顯示前半段。盡管Eclipse的自定義程度很高&#xff0c;但是卻找不到這些窗口的字體設置。 經過一番摸索后&…

AOP的簡單介紹

為什么使用AOP&#xff0c;一個簡單的回答這個問題的方法是顯示一個橫切關注點的實現而不使用AOP。 考慮一個簡單的服務及其實現&#xff1a; public interface InventoryService {public Inventory create(Inventory inventory);public List<inventory> list();public I…

java實現表達式求值_如何編寫一個高效的Java表達式求值程序

雖然&#xff0c;這個題目是有一點奪人眼球&#xff0c;但我真實這么做了(關是以否信任基準測試效果&#xff0c;這是其他一個話題)。所以&#xff0c;上周我一貫在找一個小型、適用的競賽爭辯數學表達式的類庫。有功夫我在stackoverflow上看到了一個帖子&#xff0c;里面舉薦的…

兩張表的笛卡爾積用sql語句

第一個表的行數乘以第二個表的行數等于笛卡爾積結果集的大小SELECT * FROM table1 CROSS JOIN table2轉載于:https://www.cnblogs.com/henuyuxiang/p/6811717.html

[dpdk] 讀官方文檔(3)

續前節&#xff0c; 測試小程序 1. 想編譯測試程序首先需要設置兩個環境變量&#xff0c;為什么呢&#xff0c;因為測試程序的Makefile里用了。。。 rpm裝了打包好的devel包&#xff0c;這個rpm也會自帶這兩個環境變量。就是說寫第三方程序的時候&#xff0c;習慣上&#xff0c…

比較OpenDDR和WURFL

量身定制的Web內容通常受益于定制&#xff0c;以考慮多種因素&#xff0c;例如屏幕大小&#xff0c;標記語言支持和圖像格式支持。 此類信息存儲在“設備描述存儲庫”&#xff08;DDR&#xff09;中。 WURFL和OpenDDR項目都提供了訪問DDR的API&#xff0c;以簡化并促進適應其交…