1
爲函數參數適當的父I型有代碼看起來像這樣(部分的方式,通過一個重構)確定在蝕
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
類型層次結構的要深很多,在幾個接口拉,因爲它去 - 這樣一個快速的方法來做到這一點可以節省我有一段時間。 (可能只要它把我帶出這個問題,但學習是重要的;))
明白了 - 很好的解決方案。 – ChiefTwoPencils 2015-02-09 04:59:25