Java 如何对泛型类型列表执行instanceof检查?

Java 如何对泛型类型列表执行instanceof检查?,java,generics,instanceof,Java,Generics,Instanceof,我正在写一个方法,它可以获取3个不同对象的不同列表,每个对象扩展同一个超类。方法签名如下所示: private void writeObjectToCsv(File file, List<? extends ZohoData> rawDataView) private void writeObjectToCsv(File,List我过去遇到过这个问题,并找到了两种可能的解决方法: 将运行时类添加到方法签名或保存该方法的类中,以便知道在运行时使用的是哪种类型 检查列表大小,如果它有一

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

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

private void writeObjectToCsv(File,List我过去遇到过这个问题,并找到了两种可能的解决方法:

  • 将运行时类添加到方法签名或保存该方法的类中,以便知道在运行时使用的是哪种类型
  • 检查列表大小,如果它有一个项目,则获取该项目并检查其类型
  • 此外,您还可以将类型检查移至项目被处理/使用的部分。这也将消除问题

    问候,


    Sem

    泛型仅在编译时使用,类型在编译后将被删除,在运行时不再使用。instanceof用于检查对象的类型。因此,您不能在类似列表的泛型类型类中使用instanceof。要确定列表包含的对象类型,gem解释的方法就足够了。

    您有在列表的每个元素上使用
    instanceof
    ,而不是列表本身,因为列表可能包含多个不同的子元素
    ZohoData
    的实例。我认为,由于类型擦除,在运行时,第二个参数变成了
    List
    。因此,检查该列表的类型甚至没有什么意义。我想说的是,您可能以错误的方式使用泛型。泛型的全部目的是对您的列表执行一些常见的操作o任何
    ZohoData
    的实现。右栏中显示了相关问题。特别是,和。它们是否回答了您的问题?泛型在运行时被删除。您无法检查这些。您的参数应确保类型安全。除此之外:请记住。始终提供足够的代码来重新处理问题;而不是f只列出代码的一部分,并描述其他部分。如果你认为你的问题已经解决了,考虑删除它。
    if (rawDataView instanceof List<ZohoChatData>)