使用自定义注释从抽象类调用特定子方法

时间:2017-03-29 23:43:26

标签: java annotations abstract-class

我有一个包含run()方法的抽象类,并且有一些子类覆盖了具有不同实现的run方法。还有一个自定义注释类,每个子类都有这个带有不同值的注释来区分每个子类。我是使用这些注释从抽象类对象为每个子类调用此run方法,而不使用子类名。是否有可能或有其他方法可以做到这一点?

CODE就在这里-------

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface CustomAnno {
    public String name();
}

public abstract class AbstractClass {

    abstract void run();

}

@CustomAnno(name="one")
public class ExtendingClassOne extends AbstractClass {

    @Override
    void run() {
        System.out.println("class one extending");

    }

}

@CustomAnno(name="two")
public class ExtendingClassTwo extends AbstractClass {

    @Override
    void run() {
        System.out.println("class two extending");

    }

}

因此,如果抽象类和注释值为“one”和“two”,我可以为每个子类调用run方法而不使用子类名。

1 个答案:

答案 0 :(得分:2)

我们可以使用ClassPathScanningCandidateComponentProvider spring库列出使用特定类型注释的所有类。这里的注释可以是自定义的,也可以是默认的。因此,在扩展该抽象类的所有子类上添加注释只能给出那些子类的列表。这解决了我的问题。