[英]How to test instanceof on a generic class?
我有一個包含此代碼的equals()
方法:
if (other instanceof Peach<K, V>) {
...
}
但是,這不編譯。 如何修復這行代碼?
正如已經指出的那樣,這是不可能的。 我想補充一點,這是因為所謂的類型擦除 。 官方Java教程有以下簡短摘要:
泛型被引入到Java語言中,以便在編譯時提供更嚴格的類型檢查並支持泛型編程。 為了實現泛型,Java編譯器將類型擦除應用於:
- 如果類型參數是無界的,則將泛型類型中的所有類型參數替換為其邊界或對象。 因此,生成的字節碼僅包含普通的類,接口和方法。
- 如有必要,插入類型鑄件以保持類型安全。
- 生成橋接方法以保留擴展泛型類型中的多態性。
類型擦除確保不為參數化類型創建新類; 因此,泛型不會產生運行時開銷。
這里的關鍵是“生成的字節碼因此只包含普通的類,接口和方法。” 。 因此,不可能做你想要做的檢查instanceof
。
總之,你不能。 Java會刪除泛型類型,因此,在運行時,您不再擁有此信息。
您可以使用
if (other instanceof Peach) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.