【发布时间】:2015-09-09 13:15:20
【问题描述】:
基本问题
我想继承注解,这样我就可以声明抽象类,包括用于配置的注解。那么你只需要扩展这个抽象类并实现所有抽象方法,而不需要配置任何东西。
public class A {
}
@MyAnno
public class B extends A {
public abstract void foo();
}
public class C extends B {
public void foo() {
Magic.bar();
}
}
@Inherited
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnno {
}
但是如果我检查反射,C 类没有用 MyAnno 注释。如果我将@MyAnno 添加到 C 类,它就可以工作。这对我来说似乎很奇怪。
球衣
除了我自己的注解之外,我还想使用@GET、@Path(""where/I/am) 等Java RESTful Annotations。 This should work! 但是它没有,并且被注释的超类的子类没有任何 RESTful 注释或自己的注释,什么都没有。
【问题讨论】:
-
您如何检查 C 类的注释? (我假设你并不是真的打算写
class C extends C。) -
new Reflections(MyServer.class.getPackage().getName()).getTypesAnnotatedWith(MyAnno.class) - 如果我注释子类本身,这将有效。 (Gradle:编译'org.reflections:reflections:0.9.10')
-
我不知道那个库做了什么样的反射,只是简单地做
MyAnno anno = C.class.getAnnotation(MyAnno.class)返回注释。去掉@Inherited就可以看到区别了,前面的代码会导致null -
您评论中的代码对我来说很好,返回
C和B。检查你的包裹。 -
是的...阅读 javadocs 有时会让生活更轻松。 xD 对库有什么建议,以查询特定包中的所有带注释的类吗?
标签: java inheritance annotations jersey jax-rs