为什么我不能使用 StringBuilder::reverse 作为方法引用来反转字符串?

问题描述 投票:0回答:1

为什么我不能使用 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 原因:实际和形式参数列表的长度不同

java method-reference
1个回答
0
投票

您只能将

UnaryOperator<String>
实例添加到
operators
List
。这意味着您需要一个接受
String
并返回
String
的方法。

但是您尝试添加方法引用 -

StringBuilder::reverse
- 这是一个接受
StringBuilder
并返回
StringBuilder
的方法,因此符合
UnaryOperator<StringBuilder>
.

您仍然可以将该方法与 lambda 表达式一起使用,它将接受

String
,将其转换为
StringBuilder
,反转它,然后转换回
String

operators.add(s -> new StringBuilder(s).reverse ().toString ());
© www.soinside.com 2019 - 2024. All rights reserved.