2017-09-29 188 views
0

我想用一個方法爲兩種類型,我嘗試這樣的:如何使用泛型函數參數

private <T extends Base> boolean isNeeded(String name, T receivedItem) { 
    Base item = null; 
    if (receivedRequest.getClass().equals(Derived1.class)) { 
     item = (Derived1) receivedItem; 
    } else if (request.getClass().equals(Derived2.class)) { 
     item = (Derived2) receivedItem; 
    } 
    callMethodDoSomething(item.getData().getSpecificData()); 
} 

但我不知道該怎麼稱呼這是隻有在派生類的方法。哪種做法最好,最安全?

+0

這是相當難以理解的實際問題是什麼?它會如果您提供實際調用子類(類)方法且未能編譯的代碼,則會使事情更好。這些調用應該在每個演員陣容之後在每個'''if'''塊內。是'''callMethodDoSomething''這個項目可以接受的常見處理,無論它是否擴展Derived1'或Derived2'' –

+0

也是兩個cast'''(Derived?)''' '是沒用的。 –

回答

1

這就是重載的方法。

boolean isNeeded(String name, Derived1 item) { 
    return callMethodDoSomething(
     item.getData().getSpecificData()); 
} 

boolean isNeeded(String name, Derived2 item) { 
    return callMethodDoSomething(
     item.getData().getSpecificData()); 
} 
1

爲什麼不

boolean isNeeded(Base base) { 
    return callMethodDoSomething(base.getData().getSpecificData()); 
} 

(也跳過「名稱」參數,因爲它不使用)