为什么我不能使用 StringBuilder::reverse 作为方法引用来反转字符串? 请帮助我了解幕后发生的事情。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.function.UnaryOperator;
public class Main {
public static void main(String[] args) {
Random random = new Random();
String[] names = {
"MEmarGya", "KaandHoGYa",
"lmaodEd", "OmFOOF",
"lakshayGulatiOP", "deEpAkKaLaL"
};
List<String> namesList = Arrays.asList(names);
ArrayList<UnaryOperator<String>> operators = new ArrayList<>();
operators.add(s -> s.toUpperCase());
operators.add(String::toUpperCase);
operators.add(s -> s + s.charAt(random.nextInt(0, s.length())));
operators.add(s -> s + ' ' + new StringBuilder(s).reverse());
operators.add(StringBuilder::reverse); //<------ Here
for (UnaryOperator<String> operator: operators) {
namesList.replaceAll(operator);
System.out.println(Arrays.toString(names));
}
}
}
错误发生:
java:不兼容的类型:无效的方法引用 类 java.lang.StringBuilder 中的反向方法不能应用于给定类型 要求:没有参数 找到:java.lang.String 原因:实际和形式参数列表的长度不同
您只能将
UnaryOperator<String>
实例添加到operators
List
。这意味着您需要一个接受 String
并返回 String
的方法。
但是您尝试添加方法引用 -
StringBuilder::reverse
- 这是一个接受 StringBuilder
并返回 StringBuilder
的方法,因此符合 UnaryOperator<StringBuilder>
.
您仍然可以将该方法与 lambda 表达式一起使用,它将接受
String
,将其转换为 StringBuilder
,反转它,然后转换回 String
:
operators.add(s -> new StringBuilder(s).reverse ().toString ());