2015-02-09 65 views
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類型層次結構的要深很多,在幾個接口拉,因爲它去 - 這樣一個快速的方法來做到這一點可以節省我有一段時間。 (可能只要它把我帶出這個問題,但學習是重要的;))

回答

1

原來,它的超級簡單。

  • 光標上所需的參數,
  • Alt鍵 + + Ť,(重構菜單)
  • 「一般化聲明的類型」。

然後您可以從列表中選擇Parent1

+0

明白了 - 很好的解決方案。 – ChiefTwoPencils 2015-02-09 04:59:25