标签: functional-interface

函数式接口与具有单一方法(如 Runnable)的接口

在浏览功能接口时,我无法理解它们与使用单一方法的其他接口有何不同,例如 Runnable。

我们可以在尝试使用其他 Functional 接口时使用 Runnable。在 Java 8 之前,我们已经可以为单个功能创建接口和匿名对象。

例如:

@FunctionalInterface
public interface ITrade {
  public boolean check(Trade t);
}
Run Code Online (Sandbox Code Playgroud)

这与以下有何不同:

public interface ITrade {
  public boolean check(Trade t);
}
Run Code Online (Sandbox Code Playgroud)

java java-8 functional-interface

-1
推荐指数
1
解决办法
1410
查看次数

BiFunction<X, X> 和 BinaryOperator<X> 的区别

我无法理解为什么BinaryOperator<Integer>可以A在下面的代码中放置在的位置,而不是BiFunction<Integer, Integer>

A foo = (a, b) -> { return a * a + b * b; };
int bar = foo.apply(2, 3);
System.out.println(bar);
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我理解它。

java java-8 java-stream functional-interface

-2
推荐指数
1
解决办法
1072
查看次数

为什么 java 不能为函数式接口推断类型,但仍然适用于常规语句?

我正在使用 Java 中的函数式接口,现在我正在尝试定义一个长函数,它可以做一些简单的事情,比如添加数字或其他什么。

但是,如果我尝试这样做,同时将 Integer 作为 longfunction 的类型,如下所示:

LongFunction<Integer> i = (l) -> l + l;
Run Code Online (Sandbox Code Playgroud)

但是这不起作用,我的编译器抱怨并说“lambda 表达式中的返回类型错误:long 无法转换为整数”。如果 long 通常无法转换为整数,这将是有意义的。

但我完全有能力做到这一点:

    int a = 1;
    int b = 5;
    long l = a +b;
Run Code Online (Sandbox Code Playgroud)

为什么是这样?为什么 java 完全能够将 long 转换为 int 以及正常情况下的其他方式,但在 lambda 中要严格得多?

java functional-interface

-2
推荐指数
1
解决办法
56
查看次数

不兼容的类型:lambda 表达式中的错误返回类型 | void 不是函数式接口

我正在浏览 Java 8 Feature 并使用 Jshell 来探索它。我尝试运行以下命令:

Consumer<String> consumer = (str)->System.out::println;
Run Code Online (Sandbox Code Playgroud)

但它失败并出现以下错误:

Error:
|  incompatible types: bad return type in lambda expression
|      void is not a functional interface
Run Code Online (Sandbox Code Playgroud)

我不明白到底是什么问题 Consumer 接受一个论点而什么都不返回。我在这里通过传递 1 arg str 和打印来做同样的事情。那么这个语法有什么问题。

谢谢,

java lambda consumer java-8 functional-interface

-3
推荐指数
1
解决办法
100
查看次数