有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    这里需要的是泛型方法

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

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

    如果有多个泛型类型,其中一个是另一个泛型类型的子类(例如基类和子类),则声明如下

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

    有关更多信息,请参阅https://www.tutorialspoint.com/java/java_generics.htm

  2. # 2 楼答案

    如果有一个方法具有相同的逻辑和不同的参数类型,则可以创建此类方法的通用版本。在您的情况下,这种方法看起来像:

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

    希望这有帮助

  3. # 3 楼答案

    我看到您的情况是,两个方法做几乎相同的事情,但向调用者呈现的结果不同。如果返回类型的域更大,则使用泛型。 public static E remove(List<E> arrange)

    如果返回类型有限,则可以在基类和子类之间建立关系。并使用协方差来处理多种回报类型