电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java 8的五大開發技巧

瀏覽:89日期:2022-09-05 16:05:29

我使用Java 8編碼已經有些年頭,既用于新的應用程序,也用來遷移現有的應用,感覺是時候寫一些我發現的非常有用的“最佳實踐”。我個人并不喜歡“最佳實踐”這個說法,因為它意味著“一刀切”的解決方案,而編碼不可能是這樣的工作方式——我們需要親自去發現什么樣的解決方案才是有效的。但是我發現了一些Java 8代碼中可以幫助我們的一些選擇,讓我們一起來看看吧。

 1.Optional

Optional是一個嚴重被低估的功能,并且有潛力刪除很多困擾我們的NullPointerExceptions。這在代碼邊界中(要么是正在使用的API,要么是正在暴露的API)特別有用,因為它允許你和你的調用代碼來推理所期待的東西。

然而,不加思考和設計就應用Optional可能會導致影響大量的類,并可能導致可讀性更差。下面是一些關于如何高效使用Optional的技巧。

Optional應該只用于返回類型

……不是參數,也不是字段。幸運的是,IntelliJ IDEA的讓你打開檢查來查看是是否遵循這些建議。

Java 8的五大開發技巧

Optional值應在遇到它們的地方中處理。IntelliJ IDEA的建議會防止代碼Optional泄漏,所以請記得在你發現Optional的地方處理它,迅速采取行動。

Java 8的五大開發技巧

不應該簡單調用get()

Optional的功能是表達這個值可能是空的,并讓你應對這種情況。因此,在對它做任何事情之前一定要檢查是否有一個值。只是簡單得調用get()而不先檢查isPresent()在某些時候可能會導致空指針。幸運的是,IntelliJ IDEA也有檢查可以提醒你這一點。

Java 8的五大開發技巧

可能有更優雅的方式

結合了get()的isPresent()當然會很贊…

Java 8的五大開發技巧

……但也有更優雅的解決方案。你可以使用orElse在萬一是空值的情況下給一個替代方案。

Java 8的五大開發技巧

……或者你可以使用orElseGet說明在值為空的情況下調用哪個方法。這似乎與上面的例子相同,但supplier方法將只在需要的時候調用,因此,如果這是一種昂貴的方法,那么使用lambda會有更佳性能。

Java 8的五大開發技巧

 2.使用Lambda表達式

Lambda表達式是Java 8的主要特點之一。即使你還沒有使用Java 8,你現在可能已經對它們有了基本的了解。它們是用Java編程的一種新的方式,并且什么是“最佳實踐”還不明顯。下面是我喜歡遵循的一些指引。

保持簡短

函數式程序員與較長的lambda表達式相處會更愉快,但那些淫浸于Java多年的人會發現保持lambda表達式為區區幾行代碼更容易。你甚至可能更愿意將其限制到一行代碼,并且你可以輕松重構較長的表達式為一個方法。

Java 8的五大開發技巧

這些甚至可能會成為方法引用。方法引用一開始會覺得有點陌生,但實際上堅持方法引用是有價值的,因為它們在某些情況下有助于可讀性,后面我會討論到這一點。

Java 8的五大開發技巧

明確

類型信息缺少lambda表達式,所以你可能會覺得包含類型信息用于參數會很有用。

Java 8的五大開發技巧

正如你所見,這回變得相當笨拙。所以我更喜歡給參數取一個有用的名字。當然,不管你有沒有這么做,IntelliJ IDEA可以讓你看到參數得類型信息。

Java 8的五大開發技巧

甚至是lambda所代表的函數式接口:

Java 8的五大開發技巧

 3.針對Lambda表達式設計

我認為lambda表達式有點像泛型——和泛型一起,我們經常使用它們(例如,添加類型信息到List<>),但最好我們可以設計一種方法或一個具有泛型類型(例如Person<T>)的類。同樣的,當使用類似于Streams API的東西時,我們會傳遞lambda表達式,但更好的是創造一個需要lambda參數的方法。

但是,如果你發現自己處于這類情況下,下面有一些超棒的技巧。

IntelliJ IDEA可以幫你引進函數式參數

這讓你可以在有人將傳遞一個lambda而非Object的地方創建一個參數。此功能的好處是,它表明,現有函數式接口匹配規格說明。

Java 8的五大開發技巧

這會導致…

使用現有的函數式接口

隨著開發人員越來越熟悉Java 8代碼,我們就能知道當使用如Supplier和 Consumer的接口時,會發生什么,以及創建一個本地的ErrorMessageCreator(舉個例子)可能會造成混亂,而且浪費。看看這個函數包了解一下哪些已經是可用的。

添加@FunctionalInterface到函數式接口

如果你確實需要創建自己的函數式接口,那么就這樣用此注釋標記。這似乎沒有太大的作用,但IntelliJ IDEA會告訴你,在你的接口不能匹配用于函數式接口的異常的時候。當你沒有指定要覆蓋的方法時,它會標志:

Java 8的五大開發技巧

當你指定了太多方法的時候,它會標志:

Java 8的五大開發技巧

并且如果你應用它到一個類而不是接口時,它會警告你:

Java 8的五大開發技巧

lambda表達式可用于帶有一個單一抽象方法的任何接口,但它們不能用于符合相同標準的抽象類。似乎不合邏輯,但就是這樣。

 4.Stream

Stream API是Java 8另一個大特點,并且我認為我們還真的不知道這對我們的編碼方式會產生多大的改變。下面是我發現的一些有用的東西。

排隊點操作符

我個人更喜歡排隊我的流操作。當然,你沒有必要這樣,當我發現這樣做對我有幫助:

一目了然地看到我有哪些操作調試更容易(雖然IntelliJ IDEA確實提供了對一行中的任意多個lambda表達式設置斷點的能力,但是拆分到不同的行會變得更簡單)當我測試東西的時候注釋操作輕松插入peek()用于調試或測試

Java 8的五大開發技巧

此外,在我看來,它更整潔。如果我們按照這個模式,在減少代碼行數方面我們并沒有增加很多。

你可能需要調整格式設置以排列點操作符。

Java 8的五大開發技巧

使用方法引用

是的,確實需要一段時間來適應這個奇怪的語法。但是,如果使用得當,它確實可以增加可讀性。請看:

Java 8的五大開發技巧

與(相對)新的Objects類上的輔助方法相比較:

Java 8的五大開發技巧

后者的代碼對于哪些值是要保存的更加明確。當lambda可以被折疊到方法參考的時候,IntelliJ IDEA通常會讓你知道。

Java 8的五大開發技巧

當遍歷一個集合時,在可行的情況下使用Streams API

…或者新的集合方法,如forEach。IntelliJ IDEA給你建議是:

Java 8的五大開發技巧

一般使用Streams API比循環和if語句的組合更加明確。例如:

Java 8的五大開發技巧

IntelliJ IDEA建議這可重構為:

Java 8的五大開發技巧

我所做的性能測試表明這種重構令人驚訝——并不總是可預測性能是保持不變,改善還是變得更糟。與往常一樣,如果性能在應用程序中是關鍵,那么在交付一種風格到另一種之前衡量它。

遍歷數組時使用循環

但是,使用Java 8并不一定意味著你必須到處使用流和新的集合方法。IntelliJ IDEA會建議轉換成流,但是,這并不意味著你必須回答“yes”(記得檢查是可以抑制或關閉的)。

特別是,遍歷原始類型的小型數組幾乎肯定會用,以獲得更好的性能循環,很可能(至少對于Java開發人員是新的流)更具可讀性。

Java 8的五大開發技巧

與任何技巧一樣,規則并不是一成不變的,但你應該決定是盡可能地使用Streams API,還是依然對一些操作使用循環。總之,要一致。

 最后

每天都在發現新的東西,并且有時候我的偏好會發生變化——例如,方法引用,我曾經深惡痛絕并且避免在我的代碼中使用。現在我很想聽聽你的秘訣!

英文原文:Java 8 Top Tips

標簽: Java
相關文章:
主站蜘蛛池模板: 苏州防水公司_厂房屋面外墙防水_地下室卫生间防水堵漏-苏州伊诺尔防水工程有限公司 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 培训中心-翰香原香酥板栗饼加盟店总部-正宗板栗酥饼技术 | 贵州科比特-防雷公司厂家提供贵州防雷工程,防雷检测,防雷接地,防雷设备价格,防雷产品报价服务-贵州防雷检测公司 | 印刷人才网 印刷、包装、造纸,中国80%的印刷企业人才招聘选印刷人才网! | 移动厕所租赁|移动卫生间|上海移动厕所租赁-家瑞租赁 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | 江苏农村商业银行招聘网_2024江苏农商行考试指南_江苏农商行校园招聘 | 越南专线物流_东莞国际物流_东南亚专线物流_行通物流 | 粉碎机_塑料粉碎机_塑料破碎机厂家-星标机械 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 西装定制/做厂家/公司_西装订做/制价格/费用-北京圣达信西装 | 臭氧实验装置_实验室臭氧发生器-北京同林臭氧装置网 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 广州展览设计公司_展台设计搭建_展位设计装修公司-众派展览装饰 广州展览制作工厂—[优简]直营展台制作工厂_展会搭建资质齐全 | 中国产业发展研究网 - 提供行业研究报告 可行性研究报告 投资咨询 市场调研服务 | 蓝米云-专注于高性价比香港/美国VPS云服务器及海外公益型免费虚拟主机 | 大行程影像测量仪-探针型影像测量仪-增强型影像测量仪|首丰百科 大通天成企业资质代办_承装修试电力设施许可证_增值电信业务经营许可证_无人机运营合格证_广播电视节目制作许可证 | 炉门刀边腹板,焦化设备配件,焦化焦炉设备_沧州瑞创机械制造有限公司 | 烘箱-工业烘箱-工业电炉-实验室干燥箱 - 苏州华洁烘箱制造有限公司 | 翅片管散热器价格_钢制暖气片报价_钢制板式散热器厂家「河北冀春暖气片有限公司」 | EPDM密封胶条-EPDM密封垫片-EPDM生产厂家 | 上海心叶港澳台联考一对一培训_上海心叶港澳台联考,港澳台联考一对一升学指导 | 服务器之家 - 专注于服务器技术及软件下载分享 | 合肥白癜风医院_合肥治疗白癜风医院_合肥看白癜风医院哪家好_合肥华研白癜风医院 | 好看的韩国漫画_韩漫在线免费阅读-汗汗漫画 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 齿轮减速机_齿轮减速电机-VEMT蜗轮蜗杆减速机马达生产厂家瓦玛特传动瑞环机电 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 十字轴_十字轴万向节_十字轴总成-南京万传机械有限公司 | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 海德莱电力(HYDELEY)-无功补偿元器件生产厂家-二十年专业从事电力电容器 | GAST/BRIWATEC/CINCINNATI/KARL-KLEIN/ZIEHL-ABEGG风机|亚喜科技 | 山东螺杆空压机,烟台空压机,烟台开山空压机-烟台开山机电设备有限公司 | 汽车水泵_汽车水泵厂家-瑞安市骏迪汽车配件有限公司 | 行星齿轮减速机,减速机厂家,山东减速机-淄博兴江机械制造 | 洁净化验室净化工程_成都实验室装修设计施工_四川华锐净化公司 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | 氢氧化钙设备, 氢氧化钙生产线-淄博惠琛工贸有限公司 | 上海单片机培训|重庆曙海培训分支机构—CortexM3+uC/OS培训班,北京linux培训,Windows驱动开发培训|上海IC版图设计,西安linux培训,北京汽车电子EMC培训,ARM培训,MTK培训,Android培训 |