Java 运算符重载插件

问题描述 投票:0回答:7

我见过一些不错的Java编译器hacks,其中你可以用抛出异常语句替换断言,你可以为字段自动生成属性等等...

我只是想知道...

是否有可能破解 Java 编译器以支持运算符重载?

编辑:

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

编辑:

请告诉我是否可以使用 JSR 269 或类似的东西来做到这一点。 :|

java operator-overloading
7个回答
5
投票

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


4
投票

通过一些技巧,可以使用 JSR 269 来实现 Java 运算符重载。查看 javac 和 Eclipse JDT 的 java-oo 插件:

http://amelentev.github.com/java-oo/


2
投票

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


2
投票

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


1
投票

如果您想要运算符重载,您可以考虑转向Scala。 Scala 代码可与 Java 类互操作并支持运算符重载。


1
投票

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

https://o24j.dev.java.net/

当前的实现使用Groovy 对于超载。这种方法有 缺点之一:groovy 库 必须与项目一起交付。


0
投票

它不允许运算符重载,但考虑到您问题中的链接,您可能会对 http://projectlombok.org/features/index.html

感兴趣
© www.soinside.com 2019 - 2024. All rights reserved.