Я думаю, что это ошибка. Если вы посмотрите на сгенерированный байт-код:
public int compare(java.lang.Object, java.lang.Object);
Code:
Stack=4, Locals=7, Args_size=3
0: aload_1
1: astore_3
2: aload_2
3: astore 4
5: aload_3
6: instanceof #8; //class java/lang/Integer
9: ifeq 81
12: aload_3
13: invokestatic #14; //Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
16: istore 5
18: aload 4
20: instanceof #8; //class java/lang/Integer
23: ifeq 45
26: getstatic #20; //Field scala/Predef$.MODULE$:Lscala/Predef$;
29: iload 5
31: invokevirtual #24; //Method scala/Predef$.intWrapper:(I)Lscala/runtime/RichInt;
34: aload 4
36: invokestatic #14; //Method scala/runtime/BoxesRunTime.unboxToInt:(Ljava/lang/Object;)I
39: invokevirtual #29; //Method scala/runtime/RichInt.compare:(I)I
42: goto 124
45: new #31; //class java/lang/Exception
//part omitted for brevity..
81: aload_3
82: instanceof #54; //class java/lang/Number
85: ifeq 161
88: aload_3
89: checkcast #54; //class java/lang/Number
92: astore 6
94: aload 4
96: instanceof #54; //class java/lang/Number
99: ifeq 125
102: getstatic #20; //Field scala/Predef$.MODULE$:Lscala/Predef$;
105: aload 6
107: invokevirtual #58; //Method java/lang/Number.doubleValue:()D
110: invokevirtual #62; //Method scala/Predef$.doubleWrapper:(D)Lscala/runtime/RichDouble;
113: aload 4
115: checkcast #54; //class java/lang/Number
118: invokevirtual #58; //Method java/lang/Number.doubleValue:()D
В строке 6 проверяется, является ли первая переменная экземпляром java.lang.Integer
. Если это не удается, мы продолжаем в строке 81, которая начинается с проверки java.lang.Number
. Если первая переменная является целым числом, то мы продолжаем ту же проверку второй переменной. Однако, если эта вторая проверка не удалась, вместо того, чтобы снова продолжить в строке 81 проверку номера, выполняется переход к строке 45, которая выдает исключение. Это не кажется правильным. Я быстро просмотрел trac, но не смог напрямую найти проблему, касающуюся этого , поэтому может быть целесообразно создать один .
Редактировать
Как указал Extempore, это ошибка, которая уже обнаружена, см. Его комментарий ниже.