簡體   English   中英

如何在泛型類上測試instanceof?

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

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