java-8 - 该表达式的目标类型必须是自定义接口(interface)的函数式接口(interface)

标签 java-8

我正在尝试使用 Lambda 表达式连接两个字符串。我创建了函数接口(interface) StringFormatter,它具有 format 方法,该方法将两个字符串作为参数。它应该返回字符串。 ans 应该是 Returns "Lambda Expression"或 Returns "Lambda – Expression",具体取决于 lambda 表达式。

public class Main {
    public static void main(String[] args) {
        String s1="Lambda";
        String s2="Expression";
        new Main().print(s1,s2);
    }

    public void print(String st1, String st2) {
       String result= (st1, st2) -> { return st1+" "+ st2;}; /*error- The target type of this expression must be a functional interface*/
       System.out.println(result);

    }
}
@java.lang.FunctionalInterface
interface StringFormatter {
    abstract String format(String s1, String s2);
}

最佳答案

我想你想要这样的东西:

public class Main {

    public static void main(String[] args) {
        String s1="Lambda";
        String s2="Expression";

        // format 1
        new Main().print(s1,s2, (str1, str2) -> str1 + " " + str2);

        // format 2
        new Main().print(s1,s2, (str1, str2) -> str1 + "-" + str2);

    }

    void print(String str1, String str2, StringFormatter formatter) {
        String result = formatter.format(str1, str2);
        System.out.println(result);
    }

}

@java.lang.FunctionalInterface
interface StringFormatter {
    String format(String s1, String s2);
}

关于java-8 - 该表达式的目标类型必须是自定义接口(interface)的函数式接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49670186/

相关文章:

Java 8 流 - 修改组中的所有元素

java - 如何查找列表的所有元素是否在 Java 8 中的一个集合中?

memory-management - 以编程方式查找我的应用程序内存占用

java - Grouping 类型未定义方法 flatMapping((<no type> dish) -> {}, toSet())

java - 除了节省代码行之外,lambda 表达式还有其他用途吗?

java - 通过对值求和将 map 列表合并为单个 map

java - removeIf 实现细节

java-8 - Java8 中 flatMap() 的用法

memory-leaks - Java8 中的 GroovyShell : memory leak/duplicated classes [src code + load test provided]

java - Mars MIPS 模拟器无法运行,安装有问题吗?