8

我想知道在 Java 8 中是否有可能获取标准运算符(+、-、<、>、...)的方法引用。

我想得到它,就像Foo::+Foo 是我可以得到它的某个已定义的地方一样。由于 Java 不允许在方法名称中使用特殊字符,我认为这是不可能的,是吗?

如果上述方法不存在:是否有一些地方定义了标准运算符Foo::plus

我知道有可能将它定义为 lambda ( (x, y) -> x + y),但在我看来,在某些情况下它可能更具表现力,因为它可以像在 Haskell 中那样使用对运算符的方法引用。

4

3 回答 3

7

我相信您正在寻找int Integer.sum(int, int)类似的方法,这些方法确实是由 API 提供的。

您的列表中缺少许多方法,但是 JDK 不提供最后一英寸的便利是很常见的,因为即使没有这些,它的大小也是巨大的。

如果有什么安慰的话,我的每个项目都有一个Util类,我可以在其中倾倒诸如此类的花絮。

于 2014-07-17T11:22:02.287 回答
1

一个干净的方法是一个Operators包含所有操作符的方法的辅助类。然后你可以使用这些方法作为参考。当然,一个标准库类会比一个自己的帮助类更好,但至少你可以决定那个帮助类的名字,所以你可以选择一个对你来说最有表现力的名字。

于 2014-07-17T11:28:18.220 回答
0

标准运算符只适用于原语和盒装原语,您无法动态找到哪些运算符适用于相关对象。

编辑:如果您想知道可以调用什么方法来执行标准运算符功能,您可以对大于/小于或等于运算符的可比较接口进行 instanceof 检查(http://docs.oracle.com/javase/ 8/docs/api/java/lang/Comparable.html)。

于 2014-07-17T11:23:51.797 回答