Java 8 --- Lambda 表达式
Java 8 --- Lambda Expression
import java.util.function.Function;
public class LambdaExpression {
@SuppressWarnings("rawtypes")
public static Function create(int addTo){
int n = 1;
Function<Integer, Integer> f = addT -> addTo + n;
return f;
}
public static void main(String[] args){
System.out.println(LambdaExpression.create(5));
}
}
在运行时给我这个错误:
LambdaExpression$$Lambda/424058530@1c20c684
如果您想创建一个将输入加 1 的函数,创建 该函数的方法不需要参数...但是您需要 调用那个函数来执行它。我怀疑你想要:
import java.util.function.Function;
public class LambdaExpression {
public static Function<Integer, Integer> create() {
Function<Integer, Integer> f = x -> x + 1;
return f;
}
public static void main(String[] args) {
Function<Integer, Integer> f = create();
System.out.println(f.apply(5)); // 6
}
}
如果您实际上想要一个函数来添加您传递给创建方法的任何内容(而不是总是添加 1),那很简单:
import java.util.function.Function;
public class LambdaExpression {
public static Function<Integer, Integer> create(int addTo) {
Function<Integer, Integer> f = x -> x + addTo;
return f;
}
public static void main(String[] args) {
Function<Integer, Integer> f = create(3);
System.out.println(f.apply(5)); // 8
}
}
这是预期的行为。
有人故意试图掩盖 lambda 的 toString()
,以避免依赖于 lambda 的实现方式的内部工作原理。他们希望能够更改 lambda 的实现,而不必支持 toString
。虽然我不同意这种方法,但它不会导致错误。
import java.util.function.Function;
public class LambdaExpression {
@SuppressWarnings("rawtypes")
public static Function create(int addTo){
int n = 1;
Function<Integer, Integer> f = addT -> addTo + n;
return f;
}
public static void main(String[] args){
System.out.println(LambdaExpression.create(5));
}
}
在运行时给我这个错误:
LambdaExpression$$Lambda/424058530@1c20c684
如果您想创建一个将输入加 1 的函数,创建 该函数的方法不需要参数...但是您需要 调用那个函数来执行它。我怀疑你想要:
import java.util.function.Function;
public class LambdaExpression {
public static Function<Integer, Integer> create() {
Function<Integer, Integer> f = x -> x + 1;
return f;
}
public static void main(String[] args) {
Function<Integer, Integer> f = create();
System.out.println(f.apply(5)); // 6
}
}
如果您实际上想要一个函数来添加您传递给创建方法的任何内容(而不是总是添加 1),那很简单:
import java.util.function.Function;
public class LambdaExpression {
public static Function<Integer, Integer> create(int addTo) {
Function<Integer, Integer> f = x -> x + addTo;
return f;
}
public static void main(String[] args) {
Function<Integer, Integer> f = create(3);
System.out.println(f.apply(5)); // 8
}
}
这是预期的行为。
有人故意试图掩盖 lambda 的 toString()
,以避免依赖于 lambda 的实现方式的内部工作原理。他们希望能够更改 lambda 的实现,而不必支持 toString
。虽然我不同意这种方法,但它不会导致错误。