あなたがその方法を持っているとしましょう
- しきい値と入力を取ります
- 入力がしきい値よりも小さい場合、例外が発生します
- それ以外の場合は入力を返します
次のようになります。
<N extends Number & Comparable<N>, S extends N> S ensureLessThan(N threshold, S input) {
if (input.compareTo(threshold) >= 0) {
throw new IllegalArgumentException("Input " + input + " is not less than " + threshold);
}
return input;
}
実行すると、このメソッドは:をスローしNoSuchMethodError
ます。
Exception in thread "main" java.lang.NoSuchMethodError: java.lang.Number.compareTo(Ljava/lang/Object;)I
冗長キャストのように見えるものを追加すると、機能します。
...
if (((N) input).compareTo(threshold) >= 0) {
...
では、ここで何が起こっているのでしょうか。
更新:私のJavaバージョンは
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
そして、これが実行可能な例です:https ://gist.github.com/4526536