Как преобразовать статический внутренний класс в класс верхнего уровня в Eclipse?

У меня возникли проблемы с поиском правильного параметра рефакторинга для следующего сценария:

У меня есть такой код (в Outer.java):

public class Outer {

    // ... class stuff

    public static class Inner {
        // ... inner class stuff   
    }
}

Я ищу способ выбрать Inner и преобразовать его в класс верхнего уровня в собственном исходном файле .java. Я знаю, что это довольно легко сделать вручную с помощью копирования/вставки и т. д., но внутренний класс упоминается во многих местах, и я хотел бы, чтобы параметр рефакторинга обрабатывал изменения везде, где на него ссылаются.

Я попробовал вариант Refactor -> Extract Class..., но он делает что-то странное с полем под названием data, чего я не совсем понимаю.

Версия Eclipse — 3.5.1 Galileo.

Как реорганизовать статический внутренний класс, чтобы он стал классом верхнего уровня?


Изменить: не могу поверить, что я упустил возможность сделать это. Спасибо за все ваши правильные ответы, +1 всем вам. Мне все равно нужно принять ответ, поэтому, если есть еще какая-то полезная информация, например. Гочки со сценарием, есть еще цель оставить ответ.


person Grundlefleck    schedule 22.01.2010    source источник


Ответы (6)


Это так просто, что я не могу поверить, что пропустил это:

Наведите курсор в любом месте внутреннего типа, щелкните правой кнопкой мыши и выберите:
Refactor -> Convert Member Type to Top Level...

(В настройках по умолчанию нет ярлыка)

Это автоматически извлекает внутренний тип и помещает его в собственный файл, в тот же пакет и каталог, что и внешний тип.

Обновить

В более поздних версиях Eclipse этот рефакторинг был переименован в «Переместить тип в новый файл».

person Grundlefleck    schedule 22.01.2010
comment
Кажется, в выпуске Helios функциональность была переименована в «Переместить тип в новый файл».... - person Sled; 17.03.2011
comment
И обязательно выберите только класс/интерфейс, а не все его содержимое. - person Dr. Max Völkel; 17.04.2012
comment
Это также работает для студии Android с одним дополнительным шагом (рефакторинг -> перемещение -> ...), а также может быть достигнуто с помощью сочетания клавиш F6. - person tutuDajuju; 18.04.2015
comment
Что, если существует так много внутренних классов? Должен ли я делать все это один за другим? - person Ye Kyaw Kyaw Htoo; 15.09.2016

Для полноты, версия 4.x Eclipse изменила терминологию, и теперь они называют эту операцию как Move Type to New File...

Переместить тип в новый файл

person Tom    schedule 29.06.2015

Извлечь класс — это не то, что вам нужно.

Я только что сделал это, используя Eclipse 3.4.2.

  1. Выберите внутренний
  2. Щелкните правой кнопкой мыши «Рефакторинг-> Преобразовать тип элемента в верхний уровень ...»
person Kelly S. French    schedule 22.01.2010

У меня 3.4.1, и если я щелкну правой кнопкой мыши Внутренний > рефакторинг, у меня будет опция «Скрыть тип члена на верхнем уровне ..», которая делает именно то, что вы хотите.

person EJB    schedule 22.01.2010

Используйте Рефакторинг -> Преобразовать член в тип верхнего уровня

person Klarth    schedule 22.01.2010

Для Intelj2018.1.

  1. щелкните правой кнопкой мыши во внутреннем классе
  2. Рефакторинг
  3. Переехать
  4. Перейти на верхний уровень

введите здесь описание изображения

введите здесь описание изображения

person liuzhengyang    schedule 09.05.2018