简体   繁体   English

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

[英]In Java is it possible to define a generic method to take a supertype class as an argument?

I want to achieve something like this: define an abstract method 我想实现这样的目标:定义一个抽象方法

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

and in subclass of actual implementation method: 并在实际实现方法的子类中:

public void registerError(ASubclassOfErrorVO e);

Thanks a lot for your help! 非常感谢你的帮助!

You can use generics in the declaration of the classes like this: 您可以在类的声明中使用泛型,如下所示:

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) {
    }
}

the <T extends errorVO> in a defines T as an class extending errorVO . <T extends errorVO>中,将T定义为扩展errorVO的类。 The reason this won't work just with method declarations is that you could have many methods in the subclass that could potentially override the parent's method, only by declaring the type T at the class level does the compiler know which method is being overridden. 这不能仅与方法声明一起使用的原因是,子类中可能有许多方法可能会覆盖父方法,只有通过在类级别声明类型T ,编译器才能知道哪个方法被覆盖。

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) {
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM