我想知道Java 8中是否有可能获得标准运算符的方法引用(+, - ,<,>,...)。
我希望得到它Foo::+
,其中Foo是我可以得到它的一些定义的地方。
由于Java不允许方法名称中的特殊字符,我认为不可能,是吗?
如果上述方法不存在:是否存在标准运算符定义为Foo::plus
的位置?
我知道将它定义为lambda((x, y) -> x + y
)是可能的,但在我看来,在某些情况下,如果在Haskell中可以使用对运算符的方法引用,它可能更具表现力。
答案 0 :(得分:7)
我相信您正在寻找int Integer.sum(int, int)
和类似的方法,这些方法确实由API提供。
您的列表中有许多方法缺失,但JDK通常不提供最后一英寸的便利,因为即使没有这些方法,它的大小也是巨大的。
如果这是任何安慰,我的每个项目都有一个Util
类,我会转储这些花絮。
答案 1 :(得分:1)
干净的方法是Operators
辅助类,它包含所有运算符的方法。然后你可以使用这些方法作为参考。当然,标准库类比自己的助手类更好,但至少你可以决定该助手类的名称,这样你就可以选择一个对你最有表现力的名字。
答案 2 :(得分:0)
标准运算符仅适用于基元和盒装基元,并且您无法动态查找哪些运算符适用于相关对象。
编辑:如果您想知道可以调用哪些方法来执行标准运算符函数,您可以对大于/小于或等于运算符的类似接口执行instanceof检查(http://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html )。