SpringMVC3.0.5を使用しています。Springは、整数にマップされているフィールドの整数オーバーフローを喜んで無視します。その上で適切なエラーを報告するにはどうすればよいですか?
2 に答える
4
これは Spring の問題ではなく、一般的な Java の問題です。Java には C のようなオーバーフローの問題はありませんが、整数をラップします。
@Test
public void demoIntegerWrapp(){
int value = Integer.MAX_VALUE;
value += 1;
assertEquals(Integer.MIN_VALUE, value);
}
したがって、あなたができる最善の方法は、計算に long を使用し、結果が整数の範囲内にあるかどうかを確認し、そうでない場合は例外をスローすることです。
public int overflowSaveAdd(int summand1, int summand2) {
long sum = ((long) summand1) + ((long) summand2);
if (sum < Integer.MIN_VALUE ) || (sum > Integer.MAX_VALUE) {
throw new RuntimeException(sum + " is too big for integer");
} else {
return (int) sum;
}
}
于 2011-05-20T06:59:09.317 に答える
1
整数のオーバーフロー/アンダーフローをチェックする安全な算術演算を提供するJavaライブラリがあります。たとえば、GuavaのIntMath.checkedAdd(int a、int b)は、オーバーフローしない場合はa
との合計を返し、符号付き算術でオーバーフローした場合はスローします。b
ArithmeticException
a + b
int
于 2012-12-02T23:39:05.743 に答える