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

4xrmg8kj  于 2023-02-02  发布在  Java
关注(0)|答案(3)|浏览(156)

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

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的方法,因为功能是相同的,所以如果仅仅因为不同的数据类型而实现相同的方法两次,就会出现冗余

nwwlzxa7

nwwlzxa71#

如果你有一个方法,它有相同的逻辑,不同的参数类型,你可以创建一个泛型版本的方法。在你的情况下,这样的方法看起来像:

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);
lvjbypge

lvjbypge2#

这里需要的是泛型方法。
可以用不同类型的参数调用的单个泛型方法声明。所需的泛型函数如下所示:

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

2q5ifsrm

2q5ifsrm3#

我发现你正处于这样一种情况:两个方法做几乎相同的事情,但是向调用者呈现不同的结果。如果返回类型的域较大,请使用泛型。public static E remove(List<E> arrange)
如果返回类型是有限的,你可以在基类和子类之间建立一种关系,并使用协方差来处理多个返回类型。

相关问题