在eclipse中为函数参数确定合适的父类型

时间:2015-02-09 02:58:22

标签: java eclipse refactoring

我的代码看起来像这样(通过重构的一部分)

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长达数百行,DerivedType的类型层次更深,随着时间的推移拉入几个接口 - 所以快速做到这一点可以节省我相当多的时间。 (可能不会只是它让我输入这个问题,但学习很重要;))

1 个答案:

答案 0 :(得分:1)

证明了它非常容易。

  • 所需参数上的光标,
  • Alt + Shift + T ,(重构菜单)
  • " Generalize Declared Type"。

然后您可以从列表中选择Parent1