Расширяете внутренний интерфейс? - PullRequest
10 голосов
/ 15 июля 2011

У меня простой вопрос:

Почему Eclipse кричит о реализации этих двух интерфейсов?

public abstract class Gateway implements IPlayerity, IItemity {
    public interface IPlayerity { ... }
    public interface IItemity { ... }
    // I...ity
}

Я получаю это сообщение об ошибке:

IPlayerity не может быть преобразован в тип

Ответы [ 4 ]

5 голосов
/ 15 июля 2011

Объявите интерфейсы в другом файле. Для меня очевидно, что класс верхнего уровня не может реализовать интерфейсы, вложенные в себя (хотя я не уверен, почему).

Если вы хотите сохранить интерфейсы в одном и том же файле, вам нужно изменить модификатор с public на default и объявить их после определения класса.

4 голосов
/ 15 июля 2011

У вас есть циклическая зависимость, которая не может быть разрешена, учитывая то, как работает JLS (хотя я не уверен, где в JLS это задокументировано).

Интерфейсы IPlayerity и IItemity не видныв определение заголовка класса NestedInterfaces, так как они внутри него.Я могу исправить это, изменив вашу программу на

public class NestedInterfaces implements 
      NestedInterfaces.IPlayerity, NestedInterfaces.IItemity 
{
    public interface IPlayerity {}
    public interface IItemity {}
}

, но тогда Eclipse выдаст мне эту ошибку, которая гораздо яснее:

 Multiple markers at this line
 - Cycle detected: the type NestedInterfaces cannot extend/implement itself or one of its own member types
 - Cycle detected: the type NestedInterfaces cannot extend/implement itself or one of its own member types
0 голосов
/ 15 июля 2011

Если он не может быть разрешен как тип, то он не может быть «видим». Вы должны добавить импорт для интерфейса:

import package.Gateway.IPlayerity
import package.Gateway.IItemity

все же у меня такое ощущение, что тогда компилятор выдаст еще несколько странных циклических ошибок ..

Лучше, если вы определите интерфейсы в другом файле.

0 голосов
/ 15 июля 2011

Я вижу, что эти два интерфейса не являются интерфейсом Java по умолчанию, верно? Итак, если вы получаете сообщение об ошибке «IPlayerity не может быть разрешен для типа.», Проверьте, импортируете ли вы нужные пакеты еще. Я должен прокомментировать это, но я просто не могу. Веселитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...