Java JLS中的方法参考示例

Java JLS中的方法参考示例,java,java-8,specifications,Java,Java 8,Specifications,方法参考表达式的JLS 15.13。其中之一是 (test?list.replaceAll(String::trim):list)::迭代器 这没有意义,因为replaceAll是void。我是否误解了什么,或者这是JLS中的错误(可能是replaceAll的早期版本返回了结果列表) 从技术上讲,JLS中没有指定list变量具有java.util.list类型。因此,可以使用某些自定义类型编译此代码: public static class MyList implements Iterable&

方法参考表达式的JLS 15.13。其中之一是

(test?list.replaceAll(String::trim):list)::迭代器


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

从技术上讲,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;
}
公共静态类MyList实现了Iterable{
私有最终列表=新的ArrayList();
公共MyList添加(字符串val){
列表。添加(val);
归还这个;
}
公共MyList replaceAll(一元运算符op){
列表。全部替换(op);
归还这个;
}
公共迭代器迭代器(){
return list.iterator();
}
}
公共供应商it(MyList列表,布尔测试){
return(test?list.replaceAll(String::trim):list)::迭代器;
}

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

是的,这看起来完全像一个bug。