在下面的代码中,我有这一行:stream.filter(Data::isEven); 我正在使用 afilter()并且 afilter()接受Predicate接口作为参数。我们都知道Predicate有一种带有签名的方法: public boolean test(T t); 它接受一个参数并返回一个布尔值。
我的理解是,isEven()不接受参数的方法不是有效的谓词,因为与test()方法不同,它不接受任何参数,那么为什么我的代码没有显示编译时错误?
import java.util.stream.Stream;
public class Main App {
public static void main(String args[]) {
Stream<Data> stream =
Stream.of(new Data(4), new Data(1));
stream.filter(Data::isEven); // should throw compile error but doesn't
}
}
class Data{
int i;
public Data(int i) {
this.i=i;
}
public boolean isEven() {
return i%2==0;
}
}
慕姐8265434
繁星淼淼
饮歌长啸
相关分类