目錄
為什麼仿製藥很有用
仿製藥的工作原理
關鍵好處
通用類型
類型擦除
仿製藥中的通配符
首頁 Java java教程 Java中仿製藥的概念是什麼?

Java中仿製藥的概念是什麼?

Sep 26, 2025 am 05:19 AM
java 泛型

Java中的仿製藥提供了編譯時類型的安全性,並通過允許類,接口和方法在類型參數上操作來消除鑄造的需求;例如,使用List 確保只能添加​​字符串,從而阻止運行時ClassCastExceptions;通過類型參數(例如)啟用可重複使用的代碼,例如可以容納任何類型的box 類,仿製藥可以通過類型參數進行工作;關鍵好處包括類型安全性,無鑄件和代碼可重複性;常見的通用收集包括列表,set ,map 和隊列;有限類型參數(例如將類型限製到給定類的子類別;類型Erasure在運行時刪除了通用類型信息以進行向後兼容,含義List 和List 成為相同的原始類型;通配符,和允許靈活的亞型,例如接受方法參數中的任何數字列表。

Java中仿製藥的概念是什麼?

Java中的仿製藥是一項功能,它允許您編寫可以與不同數據類型一起使用的同時提供編譯時類型安全性的類,接口和方法。它使您可以使用佔位符(類型參數)為其將要使用的數據類型定義類或方法,這些數據類型是在使用類或方法時指定的。

Java中仿製藥的概念是什麼?

為什麼仿製藥很有用

在Java 5中引入仿製藥之前,像ArrayList這樣的集合可以容納任何類型的對象。這種靈活性是有代價的:您必須在檢索它們時手動施放對象,並且沒有編譯時間檢查以確保鍵入一致性。例如:

列表list = new ArrayList();
list.add(“ Hello”);
字符串s =(string)list.get(0); //需要鑄造

如果添加了錯誤的類型(例如Integer ),則可能在運行時發生ClassCastException

Java中仿製藥的概念是什麼?

使用仿製藥,您可以指定集合應保留的類型:

 List <String> list = new ArrayList <>();
list.add(“ Hello”);
字符串s = list.get(0); //無需鑄造

現在,編譯器可確保只能添加String對象,並且您可以在不明確鑄造的情況下獲得類型的安全性。

Java中仿製藥的概念是什麼?

仿製藥的工作原理

您可以使用Angle Brackets <T>定義通用,其中T代表“類型”(但您可以使用任何有效的標識符)。例如:

公共班級框<t> {
    私人t值;

    公共void set(t value){
        this.value = value;
    }

    public t get(){
        返回值;
    }
}

在這裡, T是類型參數。創建一個Box時,您指定實際類型:

 box <string> stringbox = new box <>();
StringBox.Set(“ Hello”);

box <integer> intbox = new Box <>();
intbox.set(42);

關鍵好處

  • 類型安全:錯誤在編譯時間而不是運行時捕獲。
  • 消除鑄件:檢索物體時無需鑄造。
  • 代碼可重複性:一個通用類可以與多種類型一起使用。

通用類型

Java的收藏框架大量使用了仿製藥:

  • List<T>
  • Set<T>
  • Map<K, V>
  • Queue<T>

您還可以使用有限類型參數來限制可以使用的類型:

 public <t擴展數字> double sum(t a,t b){
    返回a.doubleValue()b.doubleValue();
}

此方法僅接受Number子類的類型。

類型擦除

仿製藥背後的一個重要概念是類型擦除。在彙編過程中,刪除通用類型信息(刪除),並替換為原始類型(例如, Object或綁定類型)。這意味著在運行時, List<String>List<Integer>都成為純List 。這是用於與較舊的Java版本的向後兼容。

例如:

 List <string> strings = new ArrayList <>();
列表<integer> ints = new ArrayList <>();

system.out.println(strings.getClass()== ints.getClass()); // 真的

這也意味著您不能直接實例化通用類型:

公共類容器<t> {
    // t item = new T(); //不允許 - 在運行時刪除t
}

仿製藥中的通配符

仿製藥支持通配符( ? )允許靈活的亞型:

  • <?> - 未知類型
  • <? extends T> - TT的任何類型
  • <? super T> - t或T的任何類型TT的超類

例子:

 public static void printnumbers(list <?擴展數字>列表){
    對於(數字n:list){
        system.out.println(n);
    }
}

此方法可以接受List<integer></integer>List<double></double> ,等等。

基本上,仿製藥通過讓您編寫靈活但類型的安全組件來使您的代碼更安全,更清潔和更重複使用。

以上是Java中仿製藥的概念是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Stock Market GPT

Stock Market GPT

人工智慧支援投資研究,做出更明智的決策

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

如何在Java中的類Path中添加JAR文件? 如何在Java中的類Path中添加JAR文件? Sep 21, 2025 am 05:09 AM

使用-cp參數可將JAR加入類路徑,使JVM能加載其內類與資源,如java-cplibrary.jarcom.example.Main,支持多JAR用分號或冒號分隔,也可通過CLASSPATH環境變量或MANIFEST.MF配置。

如何在Java中創建文件 如何在Java中創建文件 Sep 21, 2025 am 03:54 AM

UseFile.createNewFile()tocreateafileonlyifitdoesn’texist,avoidingoverwriting;2.PreferFiles.createFile()fromNIO.2formodern,safefilecreationthatfailsifthefileexists;3.UseFileWriterorPrintWriterwhencreatingandimmediatelywritingcontent,withFileWriterover

UC瀏覽器如何強制縮放網頁_UC瀏覽器網頁強制縮放功能使用技巧 UC瀏覽器如何強制縮放網頁_UC瀏覽器網頁強制縮放功能使用技巧 Sep 24, 2025 pm 04:54 PM

首先啟用UC瀏覽器內置縮放功能,進入設置→瀏覽設置→字體與排版或頁面縮放,選擇預設比例或自定義百分比;其次可通過雙指張開或捏合手勢強制調整頁面顯示大小;對於限制縮放的網頁,可請求桌面版網站以解除限制;高級用戶還可通過在地址欄執行JavaScript代碼修改viewport屬性,實現更靈活的強制縮放效果。

為什麼實時系統需要確定性響應保障? 為什麼實時系統需要確定性響應保障? Sep 22, 2025 pm 04:03 PM

實時系統需確定性響應,因正確性依賴結果交付時間;硬實時系統要求嚴格截止期限,錯過將致災難,軟實時則允許偶爾延遲;非確定性因素如調度、中斷、緩存、內存管理等影響時序;構建方案包括選用RTOS、WCET分析、資源管理、硬件優化及嚴格測試。

如何在Java中獲取通話方法的名稱? 如何在Java中獲取通話方法的名稱? Sep 24, 2025 am 06:41 AM

答案是使用Thread.currentThread().getStackTrace()獲取調用方法名,通過索引2得到調用anotherMethod的someMethod名稱,因索引0為getStackTrace、1為當前方法、2為調用者,示例輸出“Calledbymethod:someMethod”,也可用Throwable實現,但需注意性能、混淆、安全及內聯影響。

您如何處理Java的例外? 您如何處理Java的例外? Sep 23, 2025 am 04:44 AM

Java異常處理通過try-catch塊捕獲異常,finally塊確保資源清理,try-with-resources自動管理資源,throws聲明異常,自定義異常應對特定錯誤,並遵循捕獲具體異常、不忽略異常、避免空catch塊等最佳實踐,從而實現健壯且可維護的代碼。

Microsoft Edge高CPU使用率 Microsoft Edge高CPU使用率 Sep 24, 2025 am 12:17 AM

Edge佔用CPU高是因為基於Chromium內核資源消耗大,加上多標籤頁、插件運行、網站腳本及渲染機制等因素;解決方法包括:1.關閉不必要的擴展程序以減少後台負擔;2.啟用“睡眠標籤頁”功能降低閒置標籤資源佔用;3.清理後台進程並關閉GPU渲染相關設置;4.更新瀏覽器和系統確保兼容性與性能優化。

如何使用可選類避免Java中的NullPoInterException? 如何使用可選類避免Java中的NullPoInterException? Sep 25, 2025 am 06:04 AM

Optional類用於安全地處理可能為null的值,避免空指針異常。 1.使用Optional.ofNullable創建實例,可處理null值。 2.通過isPresent或ifPresent安全檢查和訪問值,避免直接調用get導致異常。 3.利用orElse、orElseGet提供默認值,或使用orElseThrow拋出自定義異常。 4.通過map和filter鍊式操作轉換或過濾值,提升代碼可讀性和健壯性。

See all articles