是否可以在Java中创建自定义运算符?

aho*_*der 9 java operator-keyword

类似于是否可以在c#中创建一个新的运算符?,是否可以为Java创建自己的运算符?我最初会说不,因为你不能重载,但是再一次,String支持+和+ =(在执行时隐式地通过StringBuilder等).

DNA*_*DNA 13

不,Java不能以这种方式扩展.你不能添加运算符,你甚至不能进一步重载内置运算符+- 即使像BigInteger这样的标准库类也必须使用诸如add()运算之类的方法+.

Scala(另一种静态JVM语言)通过使用方法调用而不是内置运算符来解决这个问题,并允许方法名称中的任何字符,因此您可以定义看似运算符的新方法,即

a + 1
Run Code Online (Sandbox Code Playgroud)

语法糖是:

a.+(1)
Run Code Online (Sandbox Code Playgroud)


Bru*_*uno 8

Java不允许这样做.

但是,如果你想在JVM(以及其他Java代码)上运行你的代码时想要实现这种语法,你可以看看Groovy,它有运算符重载(并且你也可以用它来简化DSL)语法与使用自定义运算符具有类似的效果).

请注意,定义自定义运算符(不仅仅是重载)在任何语言中都是一个大问题,因为您必须能够以某种方式改变词法分析器和语法.

  • @LouisWasserman:正如我在另一条评论中所说,我理解这个决定,但不幸的是,这并不使 Java 非常适合数学编程。对于矩阵,`a.multiply(b.multiply(c.add(d)).add(e))` 不是很好...... NumPy 很好地利用了 Python 中的运算符重载。 (2认同)