我如何对泛型类型列表进行 instanceof 检查?

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>)

然而,这给了我一个错误,显示 'illegal generic type for instanceof'(ZohoChatData 在 IDE 中标记为红色)。 ZohoChatdata 扩展了 ZohoData,所以我不明白为什么编译器给我这个错误。有人知道吗?

谢谢。

我过去遇到过这个问题,并找到了两种可能的解决方法:

  1. 将运行时 class 添加到方法签名或保存该方法的 class 中,以便您知道在运行时使用的是哪种类型。
  2. 检查列表大小,如果它有一个项目,获取该项目并检查它的类型。

此外,您可以将类型检查移至处理/使用项目的部分。这也会解决这个问题。

此致,

半月

泛型仅在编译时使用,编译后类型将被清除,运行时将不再存在。 instanceof 用于检查对象的类型。所以你不能在像 List 这样的泛型类型 class 中使用 instanceof。要确定列表包含什么类型的对象,gem 解释的方法就足够了。