在Java中,是否可以定义一个泛型方法来将超类型作为参数?

时间:2012-07-05 13:48:01

标签: java generics

我希望实现这样的目标: 定义一个抽象方法

public abstract void registerError(*any subclass of an ErrorVO or ErrorVO e);

并在实际实现方法的子类中:

public void registerError(ASubclassOfErrorVO e);

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:5)

您可以在类的声明中使用泛型:

static abstract class Parent<T extends ErrorVO> {
    public abstract void registerError(T e);
}

static class Child extends Parent<ASubclassOfErrorVO> {
    @Override
    public void registerError(ASubclassOfErrorVO e) {
    }
}

定义<T extends errorVO>中的T作为扩展errorVO的类。这个方法声明不起作用的原因是你可以在子类中有很多方法可能会覆盖父方法,只是在类级别声明类型T编译器知道哪个方法是被覆盖。

答案 1 :(得分:1)

public abstract class A <T extends ErrorVO> {
    public abstract void register(T e);
}

public class B extends A<SubclassOfErrorVO> {
    @Override
    public void register(SubclassOfErrorVOe e) {
    }
}