[英]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.