Вот мой вопрос. С тех пор, как я изучил 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)
.
Большое спасибо!