我的代码看起来像这样(通过重构的一部分)
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
的类型层次更深,随着时间的推移拉入几个接口 - 所以快速做到这一点可以节省我相当多的时间。 (可能不会只是它让我输入这个问题,但学习很重要;))
答案 0 :(得分:1)
证明了它非常容易。
然后您可以从列表中选择Parent1
。