【发布时间】:2012-05-04 12:02:43
【问题描述】:
类似于Is it possible to create a new operator in c#?,是否可以为Java 创建自己的运算符?我最初会说不,因为您不能重载,但话又说回来,String 支持 + 和 +=(在执行时通过 StringBuilder 隐式等)。
【问题讨论】:
标签: java operator-keyword
类似于Is it possible to create a new operator in c#?,是否可以为Java 创建自己的运算符?我最初会说不,因为您不能重载,但话又说回来,String 支持 + 和 +=(在执行时通过 StringBuilder 隐式等)。
【问题讨论】:
标签: java operator-keyword
不,Java 不能以这种方式扩展。你不能添加操作符,你甚至不能进一步重载像+这样的内置操作符——即使是像BigInteger这样的标准库类也必须使用像add()这样的方法,而不是像+这样的操作符。
Scala(另一种静态 JVM 语言)通过使用方法调用而不是内置运算符来解决这个问题,并允许方法名称中包含任何字符,因此您可以定义看起来是运算符的新方法,即
a + 1
是语法糖:
a.+(1)
【讨论】:
Java 不允许这样做。
但是,如果您想实现这种语法同时能够在 JVM(以及其他 Java 代码)上运行您的代码,您可以查看具有 operator overloading 的 Groovy(您还可以使用它将 DSL 用于短语法,其效果与使用自定义运算符类似)。
请注意,在任何语言中定义自定义运算符(不仅仅是重载)都是一件大事,因为您必须能够以某种方式更改词法分析器和语法。
【讨论】:
a.multiply(b.multiply(c.add(d)).add(e)) 不是很好...... NumPy 在 Python 中很好地使用了运算符重载。
不,您不能为 Java 中的运算符重载特殊符号。
【讨论】:
正如所有其他人所说,您绝对不能在 Java 中添加新的运算符。但是,其他对 Java 友好的 JVM 语言(例如 Groovy)将允许您从现有的操作符标记中定义新的操作符。
【讨论】:
没有。阅读这篇文章,了解为什么它们不应该是: http://java.dzone.com/articles/why-java-doesnt-need-operator
您可以使用其他语言(例如 Scala)在 Java 平台上实现此目的。 - https://stackoverflow.com/a/1991348/1342121
【讨论】:
RealMatrix.multiply(RealMatrix) 之类的方法相比,能够在 Python 中使用 NumPy 将矩阵与运算符重载相乘(例如)对于可读性来说非常方便。
没有。 Java 不允许运算符重载。您可以在此处查看更多讨论:https://javarevisited.blogspot.com/2011/08/why-java-does-not-support-operator.html
【讨论】: