JLS中的方法参考示例

时间:2015-05-08 20:50:37

标签: java java-8 specifications

JLS 15.13 lists examples方法引用表达式。其中之一是

  

(test ? list.replaceAll(String::trim) : list) :: iterator

这是没有意义的,因为replaceAllvoid。我是否误解了某些内容,或者这是JLS中的错误(可能是早期版本的replaceAll返回结果列表)?

1 个答案:

答案 0 :(得分:3)

嗯,从技术上讲,JLS中未指定list变量具有java.util.List类型。所以这段代码可以用一些自定义类型编译:

public static class MyList implements Iterable<String> {
    private final List<String> list = new ArrayList<>();

    public MyList add(String val) {
        list.add(val);
        return this;
    }

    public MyList replaceAll(UnaryOperator<String> op) {
        list.replaceAll(op);
        return this;
    }

    public Iterator<String> iterator() {
        return list.iterator();
    }
}

public Supplier<Iterator<String>> it(MyList list, boolean test) {
    return (test ? list.replaceAll(String::trim) : list) :: iterator;
}

但总的来说,看起来他们打算根据java.util.List做一个例子。因此,最好用基于JDK的东西替换它。