У меня есть код, который выглядит так (частично через рефакторинг)
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
намного глубже, вытягивая несколько интерфейсов, поскольку это происходит, поэтому быстрый способ сделать это может сэкономить мне немного время. (Вероятно, не до тех пор, пока он заставил меня напечатать этот вопрос, но обучение важно;))
Оказывается его супер-легкий.
Затем вы можете выбрать Parent1
из списка.