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

Java 8从ArrayList获取去重元素时报非静态方法无法从静态上下文引用错误

首先纠正你的误解:这个报错和HpbAlertKeeperDTO::getKeeperId无关,问题出在distinctByKey方法本身的调用上,你可以按照以下几点排查解决:

  • 检查distinctByKey方法是否和当前调用代码在同一个类中
    如果是跨类调用,需要在方法前加上定义该静态方法的类名,例如方法定义在StreamUtil类中,代码修改为:
    List<HpbAlertKeeperDTO> distinctAlertKeeperDTOs = alertKeeperDeviceDTO.getBizHpbAlertKeeperDTO().stream()
    .filter(StreamUtil.distinctByKey(HpbAlertKeeperDTO::getKeeperId)).collect(Collectors.toList());
    
    也可以通过静态导入简化调用,在调用类的导入代码块添加:
    import static 你的包名.StreamUtil.distinctByKey;
    
    导入后就可以直接使用方法名调用。
  • 检查distinctByKey方法的修饰符
    你当前用了protected修饰符,只能被同包类或子类访问,如果是通用工具方法建议修改为public。
  • 确认distinctByKey方法的static修饰符是否存在
    如果你实际代码里漏写了static修饰符,该方法就变成实例方法,在静态上下文(比如静态方法、静态代码块)里直接调用就会报这个错,补上static修饰符即可。
  • 检查distinctByKey是否定义在非静态内部类中
    非静态内部类不允许存在静态方法,如果你把方法写在了非静态内部类里,要么把内部类修改为静态内部类,要么把distinctByKey方法移到顶级外部类中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:42:02