2017-03-15 44 views
0

我刚开始学习Java中的lambda函数。并想知道这是否是创建“加法器”的正确方法。Java - 带参数的返回函数

public class Application { 
    public static void main(String[] args){ 
     Function<Integer, Integer> fiveAdder = adder(5); 
     System.out.println(fiveAdder.apply(1)); //6 
     System.out.println(fiveAdder.apply(2)); //7 
     Function<Integer, Integer> tenAdder = adder(10); 
     System.out.println(tenAdder.apply(1)); //11 
     System.out.println(tenAdder.apply(2)); //12 
     System.out.println(fiveAdder.apply(1)); //6 
     System.out.println(fiveAdder.apply(2)); //7 
    } 

    public static Function<Integer, Integer> adder(Integer inc){ 
     return num -> num + inc; 
    } 
} 

该代码运行良好。但我不确定这是否是正确的做法,或者是否有更好的方法。像功能部分num -> num + inc正在使用inc但不是一些最终/静态字段。 (加上IntelliJ是高照明inc对我来说,这让我很可疑...)

谢谢你的任何帮助。

+0

只要将'inc'改为'final'就足以摆脱亮点。 – kennytm

+0

* IntelliJ高亮显示inc *:并显示什么警告信息? –

+0

你想让你的“加法器”做什么?这里有什么问题? – anacron

回答

0

IMO,你的代码是很不错,但我想不出在生产代码要返回虽然加法任何情况下...

的功能等部分NUM - > NUM +公司正在使用公司,但不是一些最终/静态领域。

如果你做的inc参数final,它并没有真正有所作为。它只是阻止你在方法内重新分配inc。谁会这样做? (除了谁想要恶作剧你醉了人,人...)

如果函数的返回值取决于一个静态变量场,这将是非常奇怪的确实:

someStaticField = 5; 
Function<Integer, Integer> adder1 = adder(); 

函数像adder应是独立的。

加的IntelliJ是高照明,这让我怀疑我的INC ...

不,这不是(对我来说):

enter image description here

这也可能是别的东西,就像当你将鼠标悬停在一个变量上时所显示的亮点一样,它向你显示了你使用该变量的所有其他地方。