为了账号安全,请及时绑定邮箱和手机立即绑定

如何实现参数相同但签名不同的方法

如何实现参数相同但签名不同的方法

炎炎设计 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 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号