如何在泛型类型列表上执行检查实例?

时间:2017-06-26 12:07:53

标签: java generics instanceof

我正在编写一个方法,可以使用3个不同对象的不同列表,每个对象都扩展相同的超类。方法签名如下所示:

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

我需要知道哪个列表已作为参数传递,所以我想像这样使用instanceof检查:

if (rawDataView instanceof List<ZohoChatData>)

然而,这给了我一个错误,表示&#39;非法泛型类型(例如,ZohoChatData在IDE中标记为红色)。 ZohoChatdata扩展了ZohoData,所以我不明白为什么编译器会给我这个错误。有谁知道吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

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

  1. 将运行时类添加到方法签名或包含方法的类中,以便您知道在运行时使用的类型。
  2. 检查列表大小,是否有一个项目,获取该项目并检查其类型。
  3. 此外,您可以将类型检查移动到完全处理/使用项目的部分。这也将消除这个问题。

    此致

    了Sem

答案 1 :(得分:0)

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