Ниже приведены компиляции кода в Java 7, но не openjdk-1.8.0.45-31.b13.fc21.
static void f(Object o1, int i) {}
static void f(Object o1, Object o2) {}
static void test(boolean b) {
String s = "string";
double d = 1.0;
// The supremum of types 'String' and 'double' is 'Object'
Object o = b ? s : d;
Double boxedDouble = d;
int i = 1;
f(o, i); // fine
f(b ? s : boxedDouble, i); // fine
f(b ? s : d, i); // ERROR! Ambiguous
}
Компилятор утверждает, что последний вызов метода неоднозначен.
Если мы изменим тип второго параметра f
от int
до Integer
, тогда код будет компилироваться на обеих платформах. Почему компилируемый код не компилируется в Java 8?