当前位置: 首页 > 面试题库 >

为什么instanceof与Generic不兼容?

何峰
2023-03-14
问题内容

我正在尝试编写一个将通用列表转换为特定类型列表的函数。在下面找到代码

public <T>List<T> castCollection(List srcList, Class<T> clas){
    List<T> list =new ArrayList<T>();
    for (Object obj : srcList) {
       if(obj instanceof T){
            ...
       }
    }
    return list;
}

但是obj instanceof T显示编译错误-

无法对类型参数T执行instanceof检查。请改用其擦除对象>,因为在运行时将删除更多的通用类型信息。

任何澄清或方法来获得预期的结果?

提前致谢。:)


问题答案:

您无法以这种方式这样做。幸运的是,您已经有一个Class<T>参数,所以可以

myClass.isAssignableFrom(obj.getClass())

如果obj属于类myClass或子类,则将返回true 。

正如@ILMTitan指出的(谢谢)一样,您需要检查obj == null以避免潜在的NullPointerException或myClass.isInstance(obj)改用。可以满足您的需求。



 类似资料:
  • 问题内容: 尝试创建一个这样的: 但是编译器会继续给我以下错误:。我究竟做错了什么?我似乎在网上找不到其他东西。(是的,我尝试过将Ints转换为CGFloats,但似乎没有什么不同。) 问题答案: 试试这个: CGPath API现在已作为Swift 3中的实例方法导入。您可以通过在Command上单击进行检查。或参阅CGMutablePath的最新参考。

  • 问题内容: 我有这个简单的代码: 首先,我只使用了Lombok批注,一切都很好。但是我添加了构造函数,并且代码不再编译。错误是: 所以我有两个问题: 为什么龙目岛与此构造函数不兼容? 考虑到需要构建器和构造器,如何使代码编译? 问题答案: 您可以添加注释,因为 如果未定义其他构造函数,则生成all-args构造函数。 (引用@Andrew Tobilko) 或将属性设置为:这为您提供了复制构造函数

  • 问题内容: 我了解到Python 3不向后兼容。 使用旧版本的Python会不会影响很多应用程序? Python 3的开发人员怎么不认为使其向后兼容绝对必要? 问题答案: Python 3.0向后兼容吗?为什么? Python 3.0实现了许多非常有用的功能并打破了向后兼容性。它是故意这样做的,因此即使Python 2.x代码在Python 3.x下可能无法正常工作,也可以实现出色的功能。 因此,

  • 问题内容: 为什么此代码无法编译? 为什么我不能将类变量传递给? 问题答案: 该操作符对引用类型,像,而不是对象,如。您可能想要类似 旁注:如果编写,您的代码将更加简洁 但是,我不确定是否需要某种方法。

  • 问题内容: 如果我们采用以下代码: 相对于,更喜欢多态是什么意思,顺便说一句,为什么更好呢? 编辑: 我了解什么是多态性;我所缺少的是人们将如何使用它而不是。 问题答案: if … else …(或switch或Visitor)之间以及多态之间的主要区别是模块化。有所谓的开闭原理,这基本上意味着,当您向现有程序中添加新功能时,对现有代码所做的更改越少越好(因为每次更改都需要一些工作,并且可能会引入

  • 这是我的代码: 爪哇说: File.java:[92,141]不兼容的类型:java.lang.对象不能转换为捕获#1?扩展java.lang.对象 列141是中的。 为什么这个不会编译?