用于Java的运算符重载插件

用于Java的运算符重载插件,java,compiler-construction,Java,Compiler Construction,我见过一些很好的Java编译器,其中可以自动生成for字段等等 我只是想知道 有可能破解Java编译器,使其支持运算符重载吗 编辑: 这并不是说我在Java中缺少运算符重载之类的东西。我只是想知道是否有可能实现它使用的黑客在我上面给出的链接中提到。所以请不要建议我改用其他语言,比如Scala(我已经在学习了!:D) 编辑: 请告诉我是否可以使用JSR 269或类似的工具来完成这项工作:| 谢谢。如果你想要操作符重载,你可以考虑移动到。Scala代码可与Java类互操作,并支持运算符重载。是Jav

我见过一些很好的Java编译器,其中可以自动生成for字段等等

我只是想知道

有可能破解Java编译器,使其支持运算符重载吗

编辑:

这并不是说我在Java中缺少运算符重载之类的东西。我只是想知道是否有可能实现它使用的黑客在我上面给出的链接中提到。所以请不要建议我改用其他语言,比如Scala(我已经在学习了!:D)

编辑:

请告诉我是否可以使用JSR 269或类似的工具来完成这项工作:|


谢谢。

如果你想要操作符重载,你可以考虑移动到。Scala代码可与Java类互操作,并支持运算符重载。

是Java语言的预处理器,允许您为自己的类实现运算符重载。遗憾的是,它似乎没有将这种能力添加到标准类中(BigInteger等人将是一个很好的选择)。

另一种方法是使用Groovy库,因为Groovy已经有了运算符重载

当前的实现使用Groovy 对于过载。这一方法已经成功 一个缺点:groovy库 必须与项目一起交付


它不允许运算符重载,但考虑到您问题中的链接,您可能对

感兴趣。您可以使用字节码注入将float之类的类型替换为自己的类型。这可以在编译后完成,而无需更改编译器。

对于已编辑的问题,在Java中实现真正的运算符重载的唯一方法是将其添加到语言中。这意味着您必须更改编译器来编译代码,或者编写一个将代码转换为标准Java的预处理器。对于前者,您可以从或项目下载一个几乎完整的FOSS java实现。对于后者,您可以使用JavaCC等编写自己的解析器(示例就在这里),也可以使用它作为添加自己语法的基础。

通过一些技巧,使用JSR269实现Java操作符重载是可能的。查看javac和Eclipse JDT的java oo插件:


您应该切换到Sca。。。哦,等等……我想问一下Lombok小组的项目——Reinier Zwitserroot和Roel Spilker正在对一系列工具/编译器进行大量的编译器黑客攻击,因此他们可能会为您指出正确的方向——在我看来,可以对编译器进行黑客攻击,从而在编译器理论上做任何可能的事情。投票否决。如果它可以为
java.*
API类这样做,那将是一个很好的技巧,但我假设它使用字节码或源代码修改,这不是
java.*
的选项(无论如何,没有一些奇特的类加载器操作)。为什么要修改语言(语法)来做到这一点?运算符加载是一个语义问题。除了标识符消歧外,不必更改解析阶段。如何在不修改语法的情况下添加运算符重载?您必须添加一个
操作符
关键字,或者允许
+
-
等作为函数名。两者都需要更改可接受的语法。我意识到,您可以通过在每个类中提供特殊的方法来做到这一点,例如_sum__()等。请注意,我只提到了在编写预处理器时进行解析。这并不是我所期望的答案,但我看不到任何更好的答案。所以接受你的答案。谢谢这将如何帮助我实现我想要的?你能说得更清楚些吗?你可以用浮点数(例如)和运算符等来写你所有的代码,并用字节码替换来改变代码以使用你想要的类型。