我必须实现功能相同但返回类型不同的函数,并且函数的参数也相同。
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
的方法,因为功能相同,因此如果由于数据类型不同而两次执行相同的方法,则会出现冗余
答案 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;
}
然后,您可以将此方法与任何T
(Base
或Subclass
)一起使用,该方法将使用列表元素作为参数传递,并返回适当的类型:
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之间建立关系。并使用协方差处理多种收益类型。