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

使用Stream与Lambda时无法调用导入类的isFrom()方法

问题原因与解决办法

你遇到的问题根源在于原始类型(Raw Type)的使用,导致编译器无法识别集合中元素的具体类型,进而找不到isFrom()方法。

具体问题分析

在InternalIterator的main方法里,你是这样声明集合的:

List persons = Person.makeList();

这里的List是没有指定泛型参数的原始类型,Java编译器会把这个集合里的所有元素都当作Object类型处理。当你在stream的filter里调用p.isFrom("Milano")时,编译器认为p是Object实例,而Object类并没有定义isFrom()方法,所以就会抛出"Cannot resolve method 'isFrom(java.lang.String)'"的错误。

解决步骤

只需要给List加上泛型参数<Person>,明确集合中元素的类型即可:

import java.util.List;
import ardea.project.Person;

public class InternalIterator {
    public static void main(String[] args) {
        // 加上泛型<Person>,明确元素类型
        List<Person> persons = Person.makeList();
        long count = persons.stream()
                .filter(p -> p.isFrom("Milano"))
                .count();
        System.out.println("Persone di Milano: " + count);
    }
}

额外说明

Java 5引入泛型后,就不推荐使用原始类型了——原始类型会绕过编译时的类型检查,不仅会导致这类方法找不到的错误,还可能引发运行时的ClassCastException,尽量始终使用带泛型参数的集合类型,让编译器帮你提前发现类型问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:35:09