有 Java 编程相关的问题?

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

java泛型以防止父类成为可接受类型

在这种情况下,我必须创建一个泛型方法,该方法可以接受子对象列表,但不能接受父类对象

说我有

class ClassA {}

它的扩展范围是

class ClassB extends ClassA {}
class ClassC extends ClassA {}
executeMethod(List</* either ClassB or ClassC but not ClassA */>)

我们能用泛型实现它吗


共 (3) 个答案

  1. # 1 楼答案

    做摘要是最简单的方法。如果您不能生成抽象,您可以创建一个抽象类,该类扩展了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) {
    
    }
    
  2. # 2 楼答案

    这是无法做到的,因为Pshemo说没有ornot操作。但是,您可以这样做:

    public static void executeMethod(List<ClassB> list){ 
        sharedMethodPerhaps( ... );
    }
    
    public static void executeMethod(ArrayList<ClassC> list){
        sharedMethodPerhaps( ... );
    }
    
    private static void sharedMethodPerhaps( ... ){ 
        ...
    }
    

    这样就有了两个同名的方法,一个只接受带有ClassB对象的列表,另一个只接受带有ClassC对象的列表。因为{}和{}是不同的,所以这两种方法不会冲突。 而且sharedMethodPerhaps是私有的,所以您可以控制它是什么代码类以及如何使用

    我希望这有帮助:)

  3. # 3 楼答案

    我不知道为什么你不能只允许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 {}