Вывод типа более строгий в JDK 7, чем в JDK 6?

Я думаю, это может быть связано с Почему универсальное приведение List расширяет Set ..> до List успешно на Sun JDK 6, но не компилируется на Oracle JDK 7?

Если мы возьмем следующие классы, они хорошо компилируются под 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 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 это ошибка? Или правила вывода стали более строгими для методов?

8
задан Community 23 May 2017 в 11:56
поделиться