Странная ошибка времени компиляции, только когда класс является универсальным - PullRequest
2 голосов
/ 06 февраля 2020

Следующий код прекрасно компилируется:

public class Test {

    public static interface A<Y> {
        public B<Y> foo();
    }
    public static interface B<Y> extends A<Y> {
        public A<Y> bar();
    }

    private static class Impl
        implements A, B
    {
        public B foo() {
            return this;
        }
        public A bar() {
            return null;
        }
    }

}

Но когда параметр generi c вводится в класс верхнего уровня Test, код больше не компилируется:

public class Test<X> {

    public static interface A<Y> {
        public B<Y> foo();
    }
    public static interface B<Y> extends A<Y> {
        public A<Y> bar();
    }

    private static class Impl
        implements A, B
    {
        public B foo() {
            return this;
        }
        public A bar() {
            return null;
        }
    }

}

я получаю ошибку:

Интерфейс A не может быть реализован более одного раза с разными аргументами: Test.A и Test.A

Что вызывает эту странную ошибку компиляции? Что можно сделать, чтобы это исправить?

Кстати, я использую eclipse и Java 1.8.0_144.

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 07 февраля 2020

Как было предложено Энди Тернером в комментариях, это ошибка компилятора. При компиляции с командной строкой и javac обе версии компилируются просто отлично. Только в eclipse (используя сборку в компиляторе eclipse) возникает ошибка.

Версия Eclipse, в которой произошла ошибка, действительно устарела:

Версия: Oxygen Release (4.7.0)

Идентификатор сборки: 20170620-1800

Ошибка, по-видимому, была исправлена ​​в более поздних версиях eclipse.

...