亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

目錄
2。保存重複代碼的常見公用事業(yè)
前提 - 乾淨的輸入驗證
objects.equal()和objects.tostringHelper()
3。在JDK中找不到的強大收集類型
Multimap - 一個鍵,多個值
BIMAP - 雙向映射
表 - 二維映射
4。功能編程支持(遺產(chǎn),但仍然有用)
5。緩存:簡單的內(nèi)存緩存(無彈簧)
最後的想法
首頁 Java java教程 現(xiàn)代Java開發(fā)人員的Google Guava指南

現(xiàn)代Java開發(fā)人員的Google Guava指南

Jul 25, 2025 am 02:01 AM

番石榴對於現(xiàn)代Java開發(fā)人員提供了不變的收藏品(如不可市權(quán)的和不可投射的套件),它們?nèi)匀皇怯袃r值的,這些收藏可以確保線程安全並防止意外修改。 2。它提供了實用的實用程序,例如用於清潔輸入驗證的前提條件,objects.equal()用於零安全性比較的equal()和用於可讀的ToString()實現(xiàn)的ToStringHelper。 3. Guava介紹了高級收集類型,包括用於一對多映射的多圖像,雙向映射的BIMAP以及用於二維數(shù)據(jù)存儲的表。 4。雖然其功能編程支持(功能,謂詞,可選)在很大程度上被Java 8功能取代,而諸如iterables.filter()之類的舊方法在非流程上下文中仍然有用。 5。 cachebuilder啟用了無外部依賴性的簡單內(nèi)存緩存,適用於輕質(zhì)用例,儘管咖啡因是高性能方案的首選。選擇性地將Guava用於其出色的收集實用程序,並避免使用過時的組件,例如Guava的可選功能,而不是標準Java等效物來編寫清潔器,更安全的代碼。

現(xiàn)代Java開發(fā)人員的Google Guava指南

如果您是與JDK 8或更高版本一起工作的現(xiàn)代Java開發(fā)人員,那麼Google Guava不僅是一個不錯的選擇,而且是一種生產(chǎn)力的助推器,可以填補標準Java庫中的空白。儘管較新的Java版本吸收了Guava的一些早期創(chuàng)新(例如Optional ),但該庫仍然提供了強大的實用程序和數(shù)據(jù)結(jié)構(gòu),使代碼更清潔,更安全,更具表現(xiàn)力。

現(xiàn)代Java開發(fā)人員的Google Guava指南

這是當今Java開發(fā)人員番石榴最有價值部分的實用指南。


1。不變的收藏:安全性和清晰度

Guava的傑出特徵之一是它支持不變的收藏。這些是創(chuàng)建後無法修改的集合 - 用於防禦性編程,線程安全和清晰的API合同。

現(xiàn)代Java開發(fā)人員的Google Guava指南

而不是這個:

 List <String> list = new ArrayList <>();
list.add(“蘋果”);
list.add(“香蕉”);
//然後手動包裝或記錄不應對其進行修改

使用Guava:

現(xiàn)代Java開發(fā)人員的Google Guava指南
 Immutablist <string> fruits = immutablelist.of(“蘋果”,“香蕉”,“橙色”);
Immutablist <string> copy = imputablelist.copyof(果實);

您還可以構(gòu)建更複雜的方法:

 immutableset <string> unique = imputableset。 <string> builder()
    .add(“ a”)
    .add(“ B”)
    。
    。建造();

為什麼重要:

  • 防止意外修改
  • 設(shè)計螺紋安全
  • 明確表示意圖:“這不會改變”

注意:Java 9具有List.of() ,但是Guava的構(gòu)建者和靈活性(例如, ImmutableSortedSet , ImmutableBiMap )仍然走得更遠。


2。保存重複代碼的常見公用事業(yè)

Guava包裝了減少跨常見任務的樣板的幫助者。

前提 - 乾淨的輸入驗證

Preconditions替換NULL檢查和驗證混亂:

 public void setuser(字符串名稱,整數(shù)年齡){
    checknotnull(名稱,“名稱不能為null”);
    checkargument(age!= null && age> 0,“年齡必須為正面”);
    checkState(users.size()<max_users,“達到用戶限制”);
    //安全繼續(xù)
}
  • checkNotNull →拋出NullPointerException
  • checkArgument →拋出IllegalArgumentException
  • checkState →拋出IllegalStateException

乾淨,可讀和一致。

objects.equal()和objects.tostringHelper()

即使使用Java 8,這些幫助在Objects班級之前的幫助:

 if(objects.equal(a,b)){...} //安全處理nulls

並且要快速toString()

 @Override
公共字符串tostring(){
    返回moreObjects.tostringhelper(this)
        .add(“名稱”,名稱)
        .add(“年齡”,年齡)
        .tostring();
}

注意: MoreObjects.toStringHelper現(xiàn)在被棄用了Objects.toStringHelper 。


3。在JDK中找不到的強大收集類型

Guava添加了解決現(xiàn)實世界建模問題的高級收集類型。

Multimap - 一個鍵,多個值

而不是Map<String, List<String>> ,使用:

 Multimap <String,String> fairite = arrayListMultimap.Create();
fairite.pot(“ Ann”,“ pizza”);
fairite.pot(“ Ann”,“ Pasta”);
fairite.put(“鮑勃”,“壽司”);

for(弦食:fairite.get(“ ann”)){//創(chuàng)建的auto-list
    System.out.println(食物);
}

沒有更多的null檢查或手動列表的創(chuàng)建。

BIMAP - 雙向映射

確保密鑰和價值都是唯一的 - 因此,您可以按鍵或值查找:

 bimap <string,string> countrycodeToname = hashbimap.create();
countrycodetoname.put(“我們”,“美國”);
countryCodeToname.put(“ CA”,“加拿大”);

//反向查找
字符串代碼= countrycodetoname.inverse()。 get(“加拿大”); //→“ CA”

非常適合枚舉,配置映射或語言代碼。

表 - 二維映射

需要矩陣嗎?使用Table

表<字符串,字符串,整數(shù)> performance = hashbasedtable.create();
performance.put(“ Q1”,“移動”,120);
performance.put(“ Q1”,“桌面”,200);

整數(shù)值= performanc.get(“ Q1”,“ Mobile”); //→120

思考:行,列和值,例如電子表格。


4。功能編程支持(遺產(chǎn),但仍然有用)

Guava早於Java 8流和Lambdas,因此引入了FunctionPredicateOptional 。雖然您現(xiàn)在應該更喜歡Java 8構(gòu)造,但您仍然會在較舊的代碼庫中看到這些結(jié)構(gòu)。

而不是:

函數(shù)<string,integer> strtoint = new函數(shù)<string,integer>(){
    公共整數(shù)應用(字符串S){return integer.valueof(s); }
};

只需使用lambda:

函數(shù)<string,integer> strtoint = integer :: valueof;

但是番石榴的Optional具有影響力?,F(xiàn)在使用java.util.Optional不願使用Guava的版本以避免混亂。

儘管如此,番石榴的IterablesIterators還是有用的方法:

 iToble <string>過濾= iterables.filter(名稱,名稱 - > name.startswith(“ a”));
字符串first = iterables.getFirst(過濾,“默認”);

這些與舊版收藏或流媒體錄時非常有效。


5。緩存:簡單的內(nèi)存緩存(無彈簧)

對於輕巧的緩存而無需拉春季或咖啡因(實際上是從番石榴演變?。┑模埵褂?code>CacheBuilder :

 loadingCache <字符串,用戶> cache = cachebuilder.newbuilder()
    .maximumsize(1000)
    。
    。建造(
        新的cacheloader <字符串,用戶>(){
            公共用戶加載(字符串鍵)引發(fā)異常{
                返回fetchuserfromdatabase(key);
            }
        });

用戶用戶= cache.get(“ alice123”); //加載如果不存在

注意:對於簡單的情況,番石榴緩存仍然是堅固的,但是對於大量使用,請考慮咖啡因- 它的速度更快,更積極地發(fā)達。


最後的想法

瓜瓦不是過去的樣子 - java在許多領(lǐng)域都陷入了困境。但這遠非過時。

需要時使用番石榴:

  • 與富裕建築商的不變收藏
  • 專業(yè)數(shù)據(jù)結(jié)構(gòu)( MultimapBiMap , Table
  • 清潔公用事業(yè)(例如PreconditionsObjects.equal
  • 輕巧的緩存(或?qū)W習墊子到咖啡因)

避免:

  • Guava的OptionalFunction , Predicate - 更喜歡java.util和Lambdas
  • 在新代碼中過度使用舊版功能類型

用Maven將其添加到您的項目中:

 <依賴項>
  <groupId> com.google.guava </groupid>
  <Artifactid> guava </artifactid>
  <版本> 32.1.3-jre </version>
</dependency>

將其放在工具包中 - 並非所有內(nèi)容,但對於差距,Java仍然會打開。

基本上,使用番石榴的正確部分,忽略過時的碎屑,然後寫清潔器,更安全的爪哇。

以上是現(xiàn)代Java開發(fā)人員的Google Guava指南的詳細內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1597
29
PHP教程
1488
72
現(xiàn)代爪哇的異步編程技術(shù) 現(xiàn)代爪哇的異步編程技術(shù) Jul 07, 2025 am 02:24 AM

Java支持異步編程的方式包括使用CompletableFuture、響應式流(如ProjectReactor)以及Java19 中的虛擬線程。 1.CompletableFuture通過鍊式調(diào)用提升代碼可讀性和維護性,支持任務編排和異常處理;2.ProjectReactor提供Mono和Flux類型實現(xiàn)響應式編程,具備背壓機制和豐富的操作符;3.虛擬線程減少並發(fā)成本,適用於I/O密集型任務,與傳統(tǒng)平臺線程相比更輕量且易於擴展。每種方式均有適用場景,應根據(jù)需求選擇合適工具並避免混合模型以保持簡潔性

在Java中使用枚舉的最佳實踐 在Java中使用枚舉的最佳實踐 Jul 07, 2025 am 02:35 AM

在Java中,枚舉(enum)適合表示固定常量集合,最佳實踐包括:1.用enum表示固定狀態(tài)或選項,提升類型安全和可讀性;2.為枚舉添加屬性和方法以增強靈活性,如定義字段、構(gòu)造函數(shù)、輔助方法等;3.使用EnumMap和EnumSet提高性能和類型安全性,因其基於數(shù)組實現(xiàn)更高效;4.避免濫用enum,如動態(tài)值、頻繁變更或複雜邏輯場景應使用其他方式替代。正確使用enum能提升代碼質(zhì)量並減少錯誤,但需注意其適用邊界。

了解Java Nio及其優(yōu)勢 了解Java Nio及其優(yōu)勢 Jul 08, 2025 am 02:55 AM

JavaNIO是Java1.4引入的新型IOAPI,1)面向緩衝區(qū)和通道,2)包含Buffer、Channel和Selector核心組件,3)支持非阻塞模式,4)相比傳統(tǒng)IO更高效處理並發(fā)連接。其優(yōu)勢體現(xiàn)在:1)非阻塞IO減少線程開銷,2)Buffer提升數(shù)據(jù)傳輸效率,3)Selector實現(xiàn)多路復用,4)內(nèi)存映射加快文件讀寫。使用時需注意:1)Buffer的flip/clear操作易混淆,2)非阻塞下需手動處理不完整數(shù)據(jù),3)Selector註冊需及時取消,4)NIO並非適用於所有場景。

Java Classloader在內(nèi)部如何工作 Java Classloader在內(nèi)部如何工作 Jul 06, 2025 am 02:53 AM

Java的類加載機制通過ClassLoader實現(xiàn),其核心工作流程分為加載、鏈接和初始化三個階段。加載階段由ClassLoader動態(tài)讀取類的字節(jié)碼並創(chuàng)建Class對象;鏈接包括驗證類的正確性、為靜態(tài)變量分配內(nèi)存及解析符號引用;初始化則執(zhí)行靜態(tài)代碼塊和靜態(tài)變量賦值。類加載採用雙親委派模型,優(yōu)先委託父類加載器查找類,依次嘗試Bootstrap、Extension和ApplicationClassLoader,確保核心類庫安全且避免重複加載。開發(fā)者可自定義ClassLoader,如URLClassL

有效處理常見的Java例外 有效處理常見的Java例外 Jul 05, 2025 am 02:35 AM

Java異常處理的關(guān)鍵在於區(qū)分checked和unchecked異常並合理使用try-catch、finally及日誌記錄。 1.checked異常如IOException需強制處理,適用於可預期的外部問題;2.unchecked異常如NullPointerException通常由程序邏輯錯誤引起,屬於運行時錯誤;3.捕獲異常時應具體明確,避免籠統(tǒng)捕獲Exception;4.推薦使用try-with-resources自動關(guān)閉資源,減少手動清理代碼;5.異常處理中應結(jié)合日誌框架記錄詳細信息,便於後

Hashmap在Java內(nèi)部如何工作? Hashmap在Java內(nèi)部如何工作? Jul 15, 2025 am 03:10 AM

HashMap在Java中通過哈希表實現(xiàn)鍵值對存儲,其核心在於快速定位數(shù)據(jù)位置。 1.首先使用鍵的hashCode()方法生成哈希值,並通過位運算轉(zhuǎn)換為數(shù)組索引;2.不同對象可能產(chǎn)生相同哈希值,導致衝突,此時以鍊錶形式掛載節(jié)點,JDK8後鍊錶過長(默認長度8)則轉(zhuǎn)為紅黑樹提升效率;3.使用自定義類作鍵時必須重寫equals()和hashCode()方法;4.HashMap動態(tài)擴容,當元素數(shù)超過容量乘以負載因子(默認0.75)時,擴容並重新哈希;5.HashMap非線程安全,多線程下應使用Concu

解釋:面向?qū)ο蟮木幊讨械腏ava多態(tài)性 解釋:面向?qū)ο蟮木幊讨械腏ava多態(tài)性 Jul 05, 2025 am 02:52 AM

多態(tài)是Java面向?qū)ο缶幊痰暮诵奶匦灾唬浜诵脑陟丁耙粋€接口,多種實現(xiàn)”,它通過繼承、方法重寫和向上轉(zhuǎn)型實現(xiàn)統(tǒng)一接口處理不同對象的行為。 1.多態(tài)允許父類引用指向子類對象,運行時根據(jù)實際對象調(diào)用對應方法;2.實現(xiàn)需滿足繼承關(guān)係、方法重寫和向上轉(zhuǎn)型三個條件;3.常用於統(tǒng)一處理不同子類對象、集合存儲及框架設(shè)計中;4.使用時只能調(diào)用父類定義的方法,子類新增方法需向下轉(zhuǎn)型訪問,並註意類型安全。

有效使用爪哇枚舉和最佳實踐 有效使用爪哇枚舉和最佳實踐 Jul 07, 2025 am 02:43 AM

Java枚舉不僅表示常量,還可封裝行為、攜帶數(shù)據(jù)、實現(xiàn)接口。 1.枚舉是類,用於定義固定實例,如星期、狀態(tài),比字符串或整數(shù)更安全;2.可攜帶數(shù)據(jù)和方法,如通過構(gòu)造函數(shù)傳值並提供訪問方法;3.可使用switch處理不同邏輯,結(jié)構(gòu)清晰;4.可實現(xiàn)接口或抽象方法,使不同枚舉值具有差異化行為;5.注意避免濫用、硬編碼比較、依賴ordinal值,合理命名與序列化。

See all articles