亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何實現參數相同但簽名不同的方法

如何實現參數相同但簽名不同的方法

炎炎設計 2022-12-07 15:10:52
我必須實現具有相同功能但返回類型不同且函數參數也相同的函數。public static List<Base> remove(List<Subclass> arrange ) {    List<Base>update = new ArrayList<>();    for(Subclass arranging : arrange){        //For-loop body here    }    return update;}public static List<Subclass> remove(List<Subclass> arrange ) {    List<Subclass>update = new ArrayList<>();    for(Subclass arranging : arrange){        //For-loop body here    }    return update;}  這里Base和Subclass是已經定義的類。應該只命名一個方法,remove因為功能相同,所以如果我僅僅因為不同的數據類型而兩次實現相同的方法,就會出現冗余
查看完整描述

3 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

如果您的方法具有相同的邏輯但參數類型不同,則可以創建此類方法的通用版本。在您的情況下,這種方法如下所示:


    public static <T> List<T> remove(List<T> arrange) {

        List<T> update = new ArrayList<>();


        for (T arranging : arrange) {

            //For-loop body here

        }

        return update;

    }

然后您可以將此方法與任何T(Base或Subclass) 一起使用,該方法將處理列表中的元素作為參數傳遞并返回適當的類型:


        List<Subclass> one = ...;

        one = remove(one);


        List<Base> two = ...;

        two = remove(two);

希望這可以幫助。


查看完整回答
反對 回復 2022-12-07
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

您在這里需要的是泛型方法。

可以使用不同類型的參數調用的單個泛型方法聲明。您需要的通用函數如下所示:

public static < E > List<E> remove( List<E> arrange ) {...}

如果有多個泛型類型并且一個是另一個的子類(例如 BaseClass 和 SubClass),聲明將如下所示

public static < E, F > List<E> remove( List<F extends E> arrange ) {...}

更多信息,您可以參考https://www.tutorialspoint.com/java/java_generics.htm


查看完整回答
反對 回復 2022-12-07
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

我看到您所處的情況是,兩種方法幾乎可以做同樣的事情,但向調用者呈現的結果卻不同。如果返回類型的域較大,則使用泛型。 public static E remove(List<E> arrange)

如果返回類型有限,您可能會在 Base 和 SubClass 之間建立關系。并使用協方差來處理多種返回類型。


查看完整回答
反對 回復 2022-12-07
  • 3 回答
  • 0 關注
  • 127 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號