gpt4 book ai didi

java - 除了覆盖算术运算符之外,还有其他方法可以在 Java 中实现 "overflow safe"算术运算吗?

转载 作者:行者123 更新时间:2023-11-29 03:17:20 25 4
gpt4 key购买 nike

所以这是我的问题。自从我学了Java,我就知道算术上溢和下溢是可以存在的,java编译器不会报错给你的。现在我提出了一个 Operation 类,其中包含“溢出安全”整数 +、-、* 方法。这样如果计算确实溢出,就会抛出算术异常。

public final class Operation{

public static int aDD (int a, int b) {
//do something
if (overflow) {
throw ArithmeticException("Integer Addition Overflow");
}
return a + b;
}

public static int sUB (int a, int b) {
//do something
if (overflow) {
throw ArithmeticException("Integer Subtraction Overflow");
}
return a - b;
}

public static int mUL (int a, int b) {
//do something
if (overflow) {
throw ArithmeticException("Integer Multiplication Overflow");
}
return a * b;
}

public static long aDD (long a, long b) {
//do something
if (overflow) {
throw ArithmeticException("Long Addition Overflow");
}
return a + b;
}

public static long sUB (long a, long b) {
//do something
if (overflow) {
throw ArithmeticException("Long Subtraction Overflow");
}
return a - b;
}

public static long mUL (long a, long b) {
//do something
if (overflow) {
throw ArithmeticException("Long Multiplication Overflow");
}
return a * b;
}
}

我想覆盖 Java 中原有的算术运算符。这样我就不需要键入 int c = Operation.aDD(a, b); 来使用“溢出安全”算术运算。相反,我只需要输入 int c = a + b;

但是,有人告诉我,用户定义的运算符覆盖在 Java 中是不可能的。那么,是否可以在不覆盖 Java 中的运算符的情况下获得相同的结果。无论如何这样做都是可以接受的,包括混合 Java 和 C++ 代码。(请注意,我所有的代码目前都是用 Java 编写的。但我认为我可以使用转换器将其转换为其他语言。虽然不能保证是错误-免费。)我唯一的目标是让我的旧程序使用“溢出安全”算术运算,而不必将所有 a + b 重构为 Operation.aDD(a, b )

非常感谢!

最佳答案

您可以使用 Xtend .您可以将 Xtend 视为 Java 语言预处理器。它生成纯的、人类可读的 Java 代码。

关于operator overloading的章节在 Xtend。以下是为整数运算符“+”重载方法定义的示例:

def static operator_add(IntVar a, IntVar b) {
return Operation.add(a, b)
}

缺点

Xtend 也是一种语言,有一些小的学习曲线。它与 Java 非常相似,但也结合了 Groovy 和 Scala 语法的一些位,比如方法由关键字 'def' 定义,变量由 'var' 或 'val' 定义,否则你可以编写与 Java 相同的代码。您可以选择使用 lambda 方法、扩展方法(如在 C# 中)、多行文本文字和更多好东西。 Xtend 有优秀的 Eclipse 插件,比 Scala 好得多,但不如 vanilla Java 完全好。在调试器中评估变量有一些怪癖。使用 Xtend 插件,您可以实时查看 Xtend 代码转换成哪些纯 Java 代码。没有适用于 Idea 的插件。与 Maven 良好集成。

备选

Xtend 本身基于 Xtext ,一个用于轻松创建新语言的框架。使用它和 Xbase您可以相对轻松地创建一种与 Java 完全相同的新语言,只是运算符“+”会转换为您想要的任何内容。学习曲线要​​陡峭得多,那时您将不得不阅读大部分 Xtext 文档。

关于java - 除了覆盖算术运算符之外,还有其他方法可以在 Java 中实现 "overflow safe"算术运算吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25730554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com