2012-02-17 2 views
29

Как я могу реорганизовать (переместить) метод Java в classA в класс B и все ли ссылки на его способ обновления?Eclipse, рефакторинг java-метода в другой класс

Поддерживается ли это в Eclipse?

+0

Ну, я так не думаю, по крайней мере, в моем случае ссылки не были обновлены :( – NINCOMPOOP

+0

Я не уверен, что я вижу, как обновление ссылок может быть выполнено. Ваш метод будет вызываться экземплярами класса А где-то в кода. Обновление ссылок в этом случае будет означать, что все экземпляры класса A становятся экземплярами класса B, которые могут иметь много других побочных эффектов. –

ответ

21

Для статического метода, вы можете щелкнуть правой кнопкой мыши и выбрать «Переместить».

Obj1.myMethod() 

затем получить «переехал» в

Obj2.myMethod() 

и затмение будет исправить свои импорт и т.д.

Для не статического метода, это может не работать в зависимости от соотношения между CLASSA и classB.

Obj1 myobj1 = new Obj1(); 
myobj1.myMethod(); 
myobj1.myOtherMethod(); 

При перемещении MyMethod() к другому классу, рефакторинг бы изменить инициализацию объекта. Если myOtherMethod не перемещается, он не может просто изменить тип myobj1 на Obj2, потому что myOtherMethod не будет работать.

+0

Спасибо за объяснение, я понял это сейчас. Чтобы переместить нестатический метод, вы должны включить его в существующие параметры метода. «Следовательно, цель должна быть объявляющим классом параметра или типа поля» ... Не знаете, что означает «тип поля». Вы знаете? Здесь также есть хорошая ссылка: http://www.eclipse.org/articles/article.php?file=Article-Unleashing-the-Power-of-Refactoring/index.html – momomo

+0

Поле является переменной-членом класса , В 'Person.name', Person - это класс, имя - это поле. – Thomas

11
  • Выберите метод в представлении Outline
  • Refactor> Переместить

Если вы хотите, чтобы переместить метод в новый класс - Refactor> Extract Class

+1

Это не работает для всех методов. – momomo

+5

'Extract Class' настаивает на извлечении некоторых переменных-членов в новый класс Это раздражает, если вы хотите переместить этот метод, потому что он не зависит от какого-либо состояния экземпляра. – poolie

+0

Мастера 'Move' и' Extract Class' неудобны - я использую 'Luna 4.4.2'. что он работал: вручную создал новый класс, а затем я использовал мастер для перемещения методов. Он перемещает только один из них я, но это нормально, потому что он реорганизует все обращения к этим методам. – cbaldan

Смежные вопросы