You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArrayList中筛选与指定实例同类型的Packable元素?

解决方法

你报错的核心原因是isAssignableFrom()是Class类的方法,不能直接通过Packable实例调用。需要先获取参考实例的Class对象,再调用该方法做类型校验。

修正后的基础实现

public List<Packable> getOfType(Packable reference){
    List<Packable> typeOfItems = new ArrayList<>();
    // 获取参考实例对应的Class对象
    Class<?> referenceClass = reference.getClass();
    for (Packable item : itemsStored) {
        // 校验item的类型是否为参考类型的子类或本身
        if (referenceClass.isAssignableFrom(item.getClass())){
            typeOfItems.add(item);
        }
    }
    return typeOfItems;
}

额外优化说明

  • 如果需要严格匹配完全相同的类型(不包含子类),可以直接用==比较Class对象:
    if (referenceClass == item.getClass()) {
        typeOfItems.add(item);
    }
    
  • 进阶泛型优化:让返回列表的类型更安全,避免后续强制转换。这种方式直接传入Class对象,比传入实例更灵活:
    public <T extends Packable> List<T> getOfType(Class<T> referenceClass){
        List<T> typeOfItems = new ArrayList<>();
        for (Packable item : itemsStored) {
            if (referenceClass.isInstance(item)){
                typeOfItems.add(referenceClass.cast(item));
            }
        }
        return typeOfItems;
    }
    // 调用示例:getOfType(ConcretePackable.class)
    

内容的提问来源于stack exchange,提问作者MrYummy8626

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:05:18