簡體   English   中英

Java Generics中存儲的類型信息在哪里?

[英]Where is the type information stored in Java Generics?

對於通用 class,類型信息存儲在哪里以及如何在運行時強制執行。 例如,如果我創建一個 List 實例為: List<String> strList = new List<String>(); ,這意味着 'strList' 只能與 String 類型一起使用。 但這些信息在哪里存儲或執行? 是在 class 元數據級別還是在實例級別? 如果我創建另一個 List 類型的實例: List<Long> longList = new List<Long>(); java如何確保'strList'只能處理String,'longList'只能處理Long。 我對通用方法有同樣的問題。 每次使用不同類型調用泛型方法時,類型檢查如何工作?

但這些信息在哪里存儲或執行?

它存儲在源代碼中,並在編譯器中強制執行。

類型檢查很容易被破壞,導致運行時失敗:

List<String> strList = new ArrayList<String>();

List<Integer> intList = (List<Integer>) (List<?>) strList;
intList.add(0);

String str = strList.get(0); // ClassCastException.

然而,這並沒有被無聲地破壞:你會得到一個未經檢查的強制轉換警告,告訴你編譯器不能確定你是否在做不安全的事情。 避免這種未經檢查的強制轉換(最好),或者對代碼進行推理以確保不安全的強制轉換實際上是安全的,這都是您的負擔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM