Ошибка синтаксического анализатора XML: объект не определен

После дальнейшего изучения я был изначально ошибочным.

Техническое объяснение поведения, которое вы заметили, следующее

В главе «Спецификация языка Java» на Суперклассах и subclasses

Класс C напрямую зависит от типа T, если T упоминается в extends или implements в C либо как суперкласс или суперинтерфейс или как квалификатор в полностью квалифицированной форме имени суперкласса или суперинтерфейса.

Класс C зависит от ссылочного типа T, если выполнено одно из следующих условий:

  • C напрямую зависит от T.
  • C напрямую зависит от интерфейса I, который зависит (§9.1.3) от T.
  • C напрямую зависит от класса D, который зависит от T (используя это определение рекурсивно).

Это ошибка времени компиляции, если класс зависит от самого себя.

blockquote>

Давайте возьмем ваш код с полными именами для использования типов, предполагая t классы были объявлены в пакете com.example:

public class A implements com.example.B.BListener {
    public interface AListener {}
}

public class B implements com.example.A.AListener {
    public interface BListener {}
}

Следуя правилам из JLS выше

  • A, прямо зависит от BListener, потому что это упомянуто в implements.
  • A напрямую зависит от B, поскольку он упоминается как квалификатор в полностью квалифицированном имени суперинтерфейса (BListener есть com.example.B.BListener)
  • B напрямую зависит от AListener, поскольку он упоминается в его implements.
  • B напрямую зависит от A, поскольку он упоминается как определитель в полном объеме (f32) AListener)
  • A напрямую зависит от B, который зависит от A.

Поэтому A зависит от A, и должна произойти ошибка компиляции.


В Eclipse ошибка возникает, если вы квалифицируете имена

class A implements B.BListener {
    public static interface AListener {
    }
}

class B implements A.AListener {
    public static interface BListener {
    }
}

Если вы используете import, то это не так. Я буду открывать с ними ошибку.

30
задан NightHawk 4 December 2013 в 05:39
поделиться