假设我们有一个Predicate
和Function
接口:
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
类型不匹配。