Я думаю, это может быть связано с Почему универсальное приведение List расширяет Set ..> до List
Если мы возьмем следующие классы, они хорошо компилируются под JDK 6:
public final class Foo {
private final V value;
private Foo(final V value) {
this.value = value;
}
public static Foo of(final R value) {
return new Foo(value);
}
}
final class Tester {
@Test(groups="unit")
public static void test() {
bar(Foo.of(BigDecimal.ZERO)); // This line fails in JDK 7 but not JDK 6
}
private static void bar(final Foo extends Number> target) {
assert target != null;
}
}
Однако под JDK 7, я получаю следующую ошибку:
[ERROR] \work\fsb-core\src\test\java\com\fsb\core\Foo.java:[42,8] error:
method bar in class Tester cannot be applied to given types;
Я думал, что вывод типа был менее строгим (например, добавление вывода конструктора) в JDK 7. Однако здесь компилятор отклоняет тип, допустимый в JDK 6.
Is это ошибка? Или правила вывода стали более строгими для методов?