因为StringJoiner.length占用零个参数,所以方法引用总是需要一个StringJoiner(任意实例)并返回一个整数.换句话说,第一个分配的方法ref等效于:
Function lengthFunc = new Function() {
@Override
public Integer apply(StringJoiner stringJoiner) {
return stringJoiner.length;
}
}
您可以按如下方式调用此函数:
StringJoiner sj1 = ... // an arbitrary StringJoiner
int sjLength1 = lengthFunc.apply(sj1);
在合同中,StringJoiner.add(CharSequence)需要一个参数,所以Function函数必须采用(1)StringJoiner的arbirary实例,(2)CharSequence并返回一个StringJoiner.
您可以将参考指定给BiFunction:
BiFunction addFunc = StringJoiner::add;
相当于:
BiFunction addFunc = new BiFunction() {
@Override
public StringJoiner apply(StringJoiner stringJoiner, CharSequence charSequence) {
return stringJoiner.add(charSequence);
}
}
并将使用如下:
StringJoiner sj1 = ... // an arbitrary StringJoiner
sj1 = addFunc.apply(sj1, "a"); // no need to re-assign, but just to show the return type