java optional.map list::size Non-static method cannot be referenced from a static context

今天遇到一个奇怪的问题,在用 optional.map(List::isEmpty).orElse(true); 的时候报错

Non-static method cannot be referenced from a static context


具体代码如下

Optional> 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> 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, 而报错的代码没有指定

于是, 把报错的加上指定返回值类型就好了

这个错出的有点莫名其妙。。。 感觉是深坑

你可能感兴趣的:(java optional.map list::size Non-static method cannot be referenced from a static context)