的Java 8 --- Lambda表达式

问题描述:

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)); 
    } 
} 

运行过程中给我这个错误:的Java 8 --- Lambda表达式

LambdaExpression$$Lambda$1/[email protected]

+11

是什么让你觉得这是一个错误?你已经创建了一个'Function',并且你试图打印这个函数本身,隐式地调用'toString()'...这给你一个相对不可读的字符串值(但是不正确)。 –

+0

这是一个错误还是只是你的程序的输出? –

+0

我的程序的输出 –

如果你想创建一个函数,它增加了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 
    } 
} 

如果实际上想要的功能它增加了任何你传递给create方法(而不是一直在增加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 
    } 
} 
+0

/AdderFactoryTest.java:9:错误:在类AdderFactory中创建的方法不能应用于给定的类型; 5,AdderFactory.create(1).applyAsInt(4)); ^ 必需:无参数 找到:int 原因:实际和正式参数列表长度不同 1错误 –

+0

import java.util.function.Function; 公共类AdderFactory { /* *使“创建”方法(公共,静态)。它接受一个参数(int addTo)并返回一个函数(确保使用适当的类型)。此函数接受一个整数, *将“addTo”添加到该整数,并将结果作为整数(整数到整数函数)返回。公共静态函数 create()函数 f = x - > x + 1; return f; } } –

+0

@RonOhare:你说你想要一个总是加1的函数。为什么你想要一个参数呢?请参阅我的编辑,了解您可能想要的内容。当你没有真正清楚地问一个问题时,很难回答... –

这是正常现象。

有人故意试图掩盖lambda的toString(),以避免依赖lambdas实现的内部工作。他们希望能够改变lambda表达式的实现,而不必支持toString。虽然我不同意这种方法,但并不会造成错误。