簡體   English   中英

如何在泛型類型列表上執行檢查實例?

[英]How can i do an instanceof check on a generics type list?

我正在編寫一個方法,可以采用不同的3個不同對象列表,每個對象都擴展相同的超類。 方法簽名如下所示:

private void writeObjectToCsv(File file, List<? extends ZohoData> rawDataView)

我需要知道哪個列表已作為參數傳遞,所以我想使用instanceof檢查,如下所示:

if (rawDataView instanceof List<ZohoChatData>)

但是,這給了我一個錯誤,上面寫着“非法泛型類型”(ZohoChatData在IDE中標記為紅色)。 ZohoChatdata擴展了ZohoData,所以我不明白為什么編譯器會給我這個錯誤。 有人知道嗎?

謝謝。

我過去遇到過這個問題,並找到了兩種可能的解決方法:

  1. 將運行時類添加到方法簽名或包含該方法的類,以便您知道在運行時使用的類型。
  2. 檢查列表大小,如果它有一個項目,請獲取該項目並檢查其類型。

此外,您可以將類型檢查移動到完全處理/使用項目的部分。 這也將消除這個問題。

問候,

SEM

泛型僅用於編譯時,類型將在編譯后被擦除,並且在運行時將不再存在。 instanceof用於檢查對象的類型。 所以你不能在像List這樣的Generic類中使用instanceof。 要確定列表包含哪種類型的對象,gem所解釋的方式就足夠了。

暫無
暫無

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

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