【发布时间】:2014-09-08 18:13:39
【问题描述】:
所以这是我的问题。自从我学习了 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)。
非常感谢!
【问题讨论】:
-
您不能覆盖 Java 中的运算符。而且你不能“混合”C/C++ 和 Java。您可以在他们之间进行通话,但会有些困难,但这比您现在拥有的要丑陋得多。
-
您可以遵循 BigDecimal/BigInteger 的命名约定,它们有同样的问题。
标签: java overloading integer-overflow integer-arithmetic