在这种情况下,我必须创建一个通用方法,该方法可以接受子对象列表,但不能接受父类对象。
假设我有
class ClassA {}
正在扩展
class ClassB extends ClassA {}
class ClassC extends ClassA {}
executeMethod(List</* either ClassB or ClassC but not ClassA */>)
我们能用泛型实现吗?
我不知道为什么你不能只允许List<? extends ClassA>
,但你可以尝试:
<T Extends ClassA> void executeMethod(List<? extends T>);
//not sure if this will work but worth a try.
或
public interface ClassX {}
public class ClassA {
void executeMethod(List<? extends ClassX);
}
public ClassB extends ClassA implements ClassX {}
public ClassC extends ClassA implements ClassX {}
制作抽象是最简单的方法。如果你不能制作抽象,你可以创建一个扩展A的抽象类,然后由B和C扩展,例如:
class A {
}
abstract class X extends A {
}
class B extends X {
}
class C extends X {
}
public void executeMethod(List<? extends X> list) {
}
这是不能完成的,因为Pshemo说对此没有or
或not
操作。然而,你可以这样做:
public static void executeMethod(List<ClassB> list){
sharedMethodPerhaps( ... );
}
public static void executeMethod(ArrayList<ClassC> list){
sharedMethodPerhaps( ... );
}
private static void sharedMethodPerhaps( ... ){
...
}
这样就有了两个同名的方法,一个只接受包含ClassB
对象的列表,另一个只接收包含ClassC
对象的列表。并且由于CCD_ 6和CCD_。sharedMethodPerhaps
是私有的,所以您可以控制它是什么代码类以及如何实现。
我希望这能有所帮助:)