为 Eclipse 中的函数参数确定适当的父类型

Determine appropriate parent type for function argument in eclipse

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

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.fooParent2 中不存在。

eclipse 有没有办法告诉我 doSomething 的参数类型可以从 DeriedType 更改为 Parent1

在这种情况下很明显,但实际上,doSomething 有几百行长,DerivedType 的类型层次结构要深得多,会引入多个接口 - 所以一个快速的方法可以为我节省很多时间。 (可能不需要我把这个问题打出来,但是学习很重要;))

原来超级简单。

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

然后您可以从列表中 select Parent1