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

时间:2019-05-21 15:17:17

标签: java

我必须实现功能相同但返回类型不同的函数,并且函数的参数也相同。

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;
}  

这里BaseSubclass是已经定义的类。

那里应该只有一个名为remove的方法,因为功能相同,因此如果由于数据类型不同而两次执行相同的方法,则会出现冗余

3 个答案:

答案 0 :(得分:0)

如果您的方法具有相同的逻辑,但参数类型不同,则可以创建该方法的通用版本。在您的情况下,这种方法应类似于:

    public static <T> List<T> remove(List<T> arrange) {
        List<T> update = new ArrayList<>();

        for (T arranging : arrange) {
            //For-loop body here
        }
        return update;
    }

然后,您可以将此方法与任何TBaseSubclass)一起使用,该方法将使用列表元素作为参数传递,并返回适当的类型:

        List<Subclass> one = ...;
        one = remove(one);

        List<Base> two = ...;
        two = remove(two);

希望这会有所帮助。

答案 1 :(得分:0)

您在这里需要的称为通用方法。

可以使用不同类型的参数调用的单个通用方法声明。您需要的通用函数将如下所示:

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

答案 2 :(得分:0)

我看到您处于两种方法几乎可以完成同一件事,但向调用者呈现不同结果的情况。如果返回类型的域较大,请使用泛型。 public static E remove(List<E> arrange)

如果返回类型受到限制,则可能会在Base和SubClass之间建立关系。并使用协方差处理多种收益类型。