美文网首页java
java optional.map list::size Non

java optional.map list::size Non

作者: 情深元浅 | 来源:发表于2019-07-24 17:40 被阅读0次

    今天遇到一个奇怪的问题,在用 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://img.haomeiwen.com/i4371594/575592f433df97dd.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

    相关文章

      网友评论

        本文标题:java optional.map list::size Non

        本文链接:https://www.haomeiwen.com/subject/gtlfrctx.html