【问题标题】:Guava Function<> with void return value?Guava Function<> 带有 void 返回值?
【发布时间】:2011-04-28 22:34:50
【问题描述】:

Googe Guava for Java 是否有一个具有 void 返回值的 Function 内部类,例如 C# 的 action?我已经厌倦了制作一堆毫无意义的返回值的Function&lt;Float, Integer&gt;

【问题讨论】:

    标签: c# java functional-programming guava


    【解决方案1】:

    您可以使用Function&lt;Float, Void&gt; 并让它返回null 以使您的意图更加清晰。或者,如果您愿意,也可以创建自己的抽象类来实现 Function&lt;T, Void&gt;

    但是不,Guava 没有类似的东西......它也没有任何旨在使用类似东西的方法,例如 forEach 类型的方法。如果您使用的 Guava 的方法使用 Functions 和 Function&lt;Float, Void&gt; 或类似的......我不会真的推荐,因为这些方法不是为此而设计的(即使你 can 与其中一些)。如果您为此使用自己的方法,我会说只需制作您自己的界面,例如Callback&lt;T&gt;

    【讨论】:

    • 是不是有点像闭包?
    • @Sylvain:在方法中声明的任何匿名内部类都是一个闭包,它关闭封闭类中的字段和声明它的方法中的最终变量。在其他地方声明的非静态内部类也关闭它们包含的类的字段。
    • 好的,谢谢你的解释,所以如果我理解得很好,这个案例只是一个关闭的例子。我是对的?
    • @Sylvain:对。关闭是一个相当广泛的术语。很多人在表示“lambda 表达式”时也会使用“闭包”。
    【解决方案2】:

    在我看来,这似乎是矛盾的;你想使用一个函数(它根据输入值计算一个值),但不想返回一个值(函数通常这样做;这就是它们应该如何将返回值传达给调用者)。

    那为什么不干呢

        for (Value v : values) {
            doYourThing(v);
        }
    

    它比创建函数更紧凑,性能也更好。事实上,如果我正确理解您的用法,使用 Function 不会带来任何好处,只会添​​加相当多的样板代码。

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 2012-09-07
      • 2018-08-24
      • 2016-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-08
      • 2012-07-10
      相关资源
      最近更新 更多