Затмение может преобразовать/осуществить рефакторинг метод в класс?

Это кажется, что должно быть довольно просто, но я не вижу ничего очевидного. На что я в основном хочу сделать это, чтобы указать на метод и осуществить рефакторинг-> класс извлечения. Это взяло бы рассматриваемый метод к новому классу с тем методом как высокоуровневая общественность API. Рефакторинг также перетащил бы любые требуемые методы и переменные наряду с ним к новому классу, удалив их из старого класса, если ничто иное в старом классе не использует его.

Это - повторяющаяся задача, с которой я часто встречаюсь при рефакторинге унаследованного кода. Так или иначе я в настоящее время использую Eclipse 3.0.2, но все еще интересовался бы ответом если его доступное в более поздней версии затмения.Спасибо!

11
задан Chris Knight 2 August 2010 в 12:51
поделиться

3 ответа

Я не думаю, что такого рода рефакторинг существует.

Ошибка 225716 регистрируется для такого рода функций (с начала 2008 г.).
Ошибка 312347 также была бы хорошей реализацией такого рефакторинга.

«Создайте новый класс и переместите соответствующие поля и методы из старого класса в новый класс.»

Я упоминаю обходной путь в этом ответе SO .

10
ответ дан 3 December 2019 в 05:32
поделиться

Вы пробовали Move в группе Refactor ? Вы можете создать вспомогательный класс и переместить туда все, что захотите.

1
ответ дан 3 December 2019 в 05:32
поделиться

Похоже, это должно быть справедливо прямолинейно ...

На самом деле, Extract Class - один из наиболее сложных рефакторингов. Даже в вашем простом примере перемещения одного метода и его зависимостей возможны сложности:

  1. Если перемещенный метод может использоваться в коде, о котором вы не знаете, вам необходимо иметь прокси-метод в исходном классе, который делегирует (вызовет) перемещенный метод. (Если ваше приложение является самодостаточным или если вы знаете всех клиентов перемещаемого метода, тогда код рефакторинга может обновить вызывающий код.)
  2. Если перемещенный метод является частью интерфейса или если перемещенный метод унаследован , тогда вам также понадобится «прокси-метод».
  3. Ваш метод может вызывать частный метод / поле, которое вызывает другой метод. Вам нужно выбрать класс для вызываемого члена (возможно, в том классе, который его больше всего использует). Вам нужно будет изменить доступ с «частного» на что-то более общее.
  4. В зависимости от того, насколько исходный класс и извлеченный класс должны знать друг о друге, одному или обоим может потребоваться инициализация полей, указывающих на другое.
  5. И т. Д.

Вот почему я призываю всех проголосовать за исправление ошибки 312347 .

3
ответ дан 3 December 2019 в 05:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: