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
相关产品推荐
相关产品推荐

