3

SpringMVC3.0.5を使用しています。Springは、整数にマップされているフィールドの整数オーバーフローを喜んで無視します。その上で適切なエラーを報告するにはどうすればよいですか?

4

2 に答える 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との合計を返し、符号付き算術でオーバーフローした場合はスローします。bArithmeticExceptiona + bint

于 2012-12-02T23:39:05.743 に答える