java – BigDecimal符号eclipse插件或漂亮的外部工具

前端之家收集整理的这篇文章主要介绍了java – BigDecimal符号eclipse插件或漂亮的外部工具前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我需要使用BigDecimal进行大量的操作,我发现不得不表达
Double a = b - c * d; //natural way

BigDecimal a = b.subtract(c.multiply(d))//BigDecimal way

不仅丑陋,而且是我和业务分析师之间的错误和沟通问题的根源.他们完全可以用双打来读取代码,但现在他们不能.

当然,一个完美的解决方案将是java对操作符重载的支持,但由于不会发生这种情况,我正在寻找一个eclipse插件,甚至是一个外部工具,可以实现从“自然的方式”到“bigdecimal”的自动转换.

我不是试图预处理源代码或动态翻译或任何复杂的东西,我只是想要一些我可以输入文本和获取文本,并保持“自然的方式”作为一个注释在源代码.

P.S .:我找到了this incredible smart hack,但是我不想开始进行字节码操作.也许我可以使用它来创建一个Natural2BigDecimal翻译器,但如果有人已经做了这样一个工具,我不想重新发明.

我不想切换到Scala / Groovy / JavaScript,我也不能,公司规则禁止任何东西,但服务器端代码中的java.

解决方法

“我不是想要处理源代码…我只是想要一些我可以输入[bigDecimal算术表达式]文本”.

解决问题的一半是认识到它的问题.您完全需要预处理您的BigDecimal表达式来产生合法的Java.

你只有两个基本的选择:

>独立的“域特定语言”和DSL编译器,接受“标准”表达式,并将它们直接转换为Java代码. (这是一种预处理器).这会让您遇到保留所有表达式片段的问题,并以某种方式知道将其放在Java代码中的位置.
>读取Java源文本的工具,查找这些表达式,并将其转换为文本中的BigDecimal.我会提出一些让你在实际代码之外编写表达式并插入翻译的东西.

(也许(从另一个答案中偷走):

// BigDecimal a = b - c * d;
 BigDecimal a = b.subtract( c.multiply( d ) );

具有意义“将注释中的大十进制表达式编译为其Java等效项,并将该语句替换为该翻译.

要实现第二个想法,您需要一个program transformation system,它可以应用源到源重写规则来转换(生成转换的特殊情况)代码.这只是一个预处理器,可以根据您的需要进行自定义.

我们DMS Software Reengineering ToolkitJava Front End 可以做到这一点.你需要一个完整的Java解析器来做这个转换部分;您将需要名称和类型解析,以便您可以解析/检查提出的表达式以确定.

虽然我同意现有的Java符号是丑陋的,你的建议会让它更漂亮,但我个人的看法是不值得的.你最终依赖于一个复杂的工具(是的,DMS是复杂的:操纵代码并不容易),这是一个相当微不足道的收益.

如果您和您的团队撰写了数千种这些公式,或者这些公式的作者是Java天真的,这可能是有道理的.在这种情况下,我会进一步,只是坚持你写你需要的标准表达格式.您可以自定义Java前端以检测操作数类型为十进制类型,并为您重写.然后,您只需在每个Java编译步骤之前运行此预处理程序.

猜你在找的Java相关文章