Определите соответствующий родительский тип для аргумента функции в Eclipse

1

У меня есть код, который выглядит так (частично через рефакторинг)

void doSomething( DerivedType v ) {
  v.foo();
  v.bar();
  ...
}

public static class DerivedType extends Parent1 {
  @Override void foo() { ... }
}

public static class Parent1 extends Parent2 {
  public void foo() {...}
  public void bar() {...}
}

public static class Parent2 {
  public void bar() { ... }
}

В этом случае сигнатура функции для doSomething является чрезмерно ограничительной. Он будет принимать только DerivedType хотя он использует только функции, доступные в Parent1.

Было бы разумно изменить

void doSomething(DerivedType v){
...
}

в

void doSomething(Parent1 v){
...
}

и все должно работать, так как doSomething использует только функции, определенные в Parent1. Не было бы никаких изменений, необходимых в тех местах, где doSomething.

Обратите внимание: он не может быть изменен на void doSomething(Parent2 v){...} поскольку v.foo не существует в Parent2.

Есть ли способ для eclipse сказать мне, что тип аргумента doSomething может быть изменен с DeriedType на Parent1?

В этом случае это довольно очевидно, но на самом деле doSomething составляет несколько сотен строк, а тип hierachy для DerivedType намного глубже, вытягивая несколько интерфейсов, поскольку это происходит, поэтому быстрый способ сделать это может сэкономить мне немного время. (Вероятно, не до тех пор, пока он заставил меня напечатать этот вопрос, но обучение важно;))

Теги:
refactoring

1 ответ

1
Лучший ответ

Оказывается его супер-легкий.

  • Курсор по желаемому параметру,
  • Alt + Shift + T, (меню рефакторинга)
  • Msgstr "Обобщить объявленный тип".

Затем вы можете выбрать Parent1 из списка.

  • 0
    Понял - хорошее решение.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню