假设我们有一个PredicateFunction接口:

Function<String, String> function = null;
Predicate<String> predicate = null;


现在,我想给Predicate -Interface一个方法引用,其中返回类型为boolean,在我们的例子中为字符串。但是,为什么以下方法参考似乎正确:

Predicate<String> predicate = String::isEmpty;


尽管isEmpty接口需要一个字符串参数,但是Predicate方法没有字符串参数。为什么它仍然正确?我想念什么吗?

另一个例子:在我们的例子中,Function接口返回一个String并将String作为参数。但是以下方法参考似乎是错误的:

Function<String, String> function = String::concat;  //wrong


Concat方法具有一个String作为参数,并返回一个String。为什么错了?

希望有人可以向我解释。

最佳答案

在实例方法上使用方法引用时,方法接收者将成为第一个参数。所以

String::isEmpty


相当于

(String str) -> str.isEmpty()




String::concat


相当于

(String a, String b) -> a.concat(b)


...与Function类型不匹配。

09-11 17:30