Java - 带参数的返回函数

时间:2017-03-15 06:48:22

标签: java lambda

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

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对我而言让我怀疑......)

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

IMO,您的代码非常好,但我无法想到您希望返回加法器的生产代码中的任何情况......

  

与功能部分num一样 - &gt; num + inc使用inc但不是某些final / static字段。

如果你制作了<dimen name="tab_max_width">XXXdp</dimen> 参数inc,那么它并没有什么区别。它只是阻止您在方法中重新分配final。谁会这样做? (除了醉酒的人和想要恶作剧的人......)

如果函数的返回值取决于变量静态字段,那确实很奇怪:

inc

someStaticField = 5; Function<Integer, Integer> adder1 = adder(); 这样的函数应该是独立的。

  

Plus IntelliJ为我提供高亮度的照明,让我怀疑......

不,不是(对我来说):

enter image description here

它可能是其他内容,例如当您将鼠标悬停在某个变量上时所获得的突出显示,它会显示您使用该变量的所有其他位置。