Импорт не используется над унаследованным вложенным классом - PullRequest
0 голосов
/ 01 апреля 2020

Моя проблема довольно проста: я хочу использовать класс с именем Type (на самом деле org.eclipse.uml2.uml.Type в Swing JDialog.

Мой код (отрывок):

import org.eclipse.uml2.uml.Type;

public class MyDialog extends JDialog {

    private List<Type> myTypes;

Проблема в том, что это не работает должным образом. Eclipse сообщает мне, что класс Type, упомянутый в объявлении myTypes, действительно Window.Type, и мой следующий код, использующий эту переменную, не компилируется. Я вижу, что JDialog extends Dialog extends Window, который содержит вложенное перечисление Type.

Меня удивляет то, что, например, когда я хочу использовать класс Class из пакета uml, я просто импортирую этот класс Class и компилятор могут понять, что я хочу использовать класс в этом импорте, а не класс Class, который он выберет без импорта (java .lang one). работать здесь, и я обязан использовать квалифицированное имя во всем моем коде.

Что еще удивляет меня, так это то, что, согласно do c, это Window.Type перечисление было добавлено в java 7, что означает, что любой код, похожий на мой, работал бы до Я java 6 и внезапно перестал работать в java 7, так что срочное изменение ...

Я использую Java 8 и Eclipse Oxygen.

Есть что-то, что я пропустил? Вариант компилятора или что-то? Это ожидается, и я должен жить с этим?

1 Ответ

1 голос
/ 01 апреля 2020

Вот так * Спецификация языка Java определяет правила области видимости для классов-членов JLS §8.5 Перечисление Type члена из Window находится в области видимости, поэтому импорт не будет использоваться.

Это не то, что Eclipse разрешено изменять, поскольку оно должно подчиняться спецификации.

Вы можете ссылаться на класс UML, используя его полное имя

private List<org.eclipse.uml2.uml.Type> myTypes;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...