java中泛型类中的超类

时间:2016-06-02 00:07:51

标签: java generics inheritance

这是我第一次来这里,但我会尽力描述我的问题:

我有一个抽象类A。我还有抽象类BC扩展A。然后我的课程延长BC

现在我有一个通用类只接受扩展A的类。 (class XYZ<ABC extends A>…

现在我基本上想要创建一个与泛型类一起使用的方法,但仅限于使用扩展B的类的实例。

我试过这样的事情:

public void method(XYZ<B> t){}

这可悲的是没有用。 IDE希望我拥有t类型或其他方式。

现在问题:
为什么这不起作用?它似乎不会导致任何问题,因为子类必须提供超类中的所有方法 除了为B的每个子类创建一个方法或更改我想要使用的对象的类型之外,有没有办法解决这个问题?

示例代码:

public class main {

public static void main(String[] args) {
    ArrayList<Abc> foo = new ArrayList<>();
    xyz(foo);
}
private void xyz(ArrayList<B> abs){}


private static abstract class  A{}
private static abstract class  B extends A{}
private static abstract class  C extends A{}
private static class Abc extends B{}
}

1 个答案:

答案 0 :(得分:1)

试试这样:

public class Main {

    public static void main(String[] args) {
        ArrayList<Abc> foo = new ArrayList<>();
        xyz(foo);
    }

    private static <T extends B> void xyz(ArrayList<T> abs){
        System.out.print("running xyz");
    }


    private static abstract class  A{}
    private static abstract class  B extends A{}
    private static abstract class  C extends A{}
    private static class Abc extends B{}
}

似乎是你的目标。请查看here以获取更多信息。