今天遇到一个奇怪的问题,在用 optional.map(List::isEmpty).orElse(true); 的时候报错
Non-static method cannot be referenced from a static context
具体代码如下
Optional<List<BallDo>> queryBalls(BallDo ballDo);
Optional optional = ballService.queryBalls(ballDo);
boolean haveVal = optional.map($\color{red}{$
List::isEmpty}).orElse(true);
红色字体部分就是报错的地方。
首先是定位错误, Non-static 这个关键字眼着手, 然后检查代码里面是否调用了static 关键字的方法,
然而,并没有。
随后想到, Optional既然这么好玩, 用的人肯定多
然后各种百度, 就是得不到结果, 无奈之下, 写了个测试用例
@Test
public void testMap() {
List list =new ArrayList<>();
Optional<List<String>> opt = Optional.of(list);
boolean optValue = opt.map(List::isEmpty).orElse(false);
System.out.println("value" + optValue);
}
而此时, 上面的代码是好的, 也没有报Non-static method cannot be referenced from a static context这个错
然后我仔细对比了上面和测试用例的代码
Optional是范型, 测试代码指定了是list, 而报错的代码没有指定
于是, 把报错的加上指定返回值类型就好了
这个错出的有点莫名其妙。。。 感觉是深坑
![qrcode.jpg](https://upload-images.jianshu.io/upload_images/4371594-575592f433df97dd.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)