為什麼我無法將元素添加到列表中
理解列表資料結構
在 Java 中,了解在泛型中使用通配符的限制至關重要。讓我們深入研究為聲明為List 的List 添加元素的具體問題extends Number>:
List<? extends Number> foo3 = new ArrayList<Integer>();
當您嘗試在foo3 中加入整數時,您可能會遇到類似以下內容的錯誤:
The method add(capture#1-of ? extends Number) in the type List<capture#1-of ? extends Number> is not applicable for the arguments (ExtendsNumber)
為什麼無法加入清單
通配符 ?擴充清單中的數字 foo3 表示 foo3 可以儲存擴充 Number 的一系列類型的值。這意味著以下分配都是有效的:
List<? extends Number> foo3 = new ArrayList<Number>(); // Number extends Number List<? extends Number> foo3 = new ArrayList<Integer>(); // Integer extends Number List<? extends Number> foo3 = new ArrayList<Double>(); // Double extends Number
但是,鑑於這種靈活性,不可能確定地確定可以添加到 foo3 中而不違反其完整性的物件類型。禁止加入 Integer,因為 foo3 可能指向 List
抽象的保證
本質上,List保證你只能從中讀取並且會得到一個 T 或 T 的子類別。由於你不能保證清單的具體類型,所以你不能安全地添加到它。
相較之下,List< ;?超級T>允許您新增類型 T 或其子類別的值,因為您可以確定清單可以保存這些值而不違反其類型安全性。
範例:了解Collections.copy()
考慮Collections.copy() 的簽名:
public static <T> void copy(List<? super T> dest, List<? extends T> src)
注意src 的通配符(? extends T) 如何允許你傳遞保存類型T 或其子類別的值的任何列表,保證src 產生的值將是類型T 或其子類別。這使得該方法能夠處理各種清單類型,安全地複製值。
結論
了解使用泛型通配符的限制對於編寫健全的 Java 程式碼至關重要。請記住,您無法添加到列表因為你不能保證它所指向的清單的具體類型。相反,您只能從中讀取並確保取得 T` 類型或其子類別的值。
以上是為什麼我無法將元素添加到列表中的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
