如何发现子类中的方法(参数)是否具有在实现的接口中定义的注释?
不幸的是,注释继承似乎受到以下事实的严格限制:只能继承来自类(而不是接口)的类级注释。
考虑这段代码:
interface Foo {
@A
void bar(String str, @B int i);
}
class FooImpl implements Foo {
void bar(String str, @B int i) { ... }
}
如果我有一个 FooImpl
的实例,是否可以发现该方法是否已用 A
注释(在类中(简单)或在实现中)界面)?
那么方法参数呢?是否有可能发现是否以及哪个参数已用 B
注释?
看来这对于 AspectJ 来说是不可能的,我需要使用 Java Reflection。
固体溶液会是什么样子?
Unfortunately it seems that annotation inheritance is severely restricted by the fact that only class-level annotations from classes (and not interfaces) can be inherited.
Consider this code:
interface Foo {
@A
void bar(String str, @B int i);
}
class FooImpl implements Foo {
void bar(String str, @B int i) { ... }
}
If I have an instance of FooImpl
is it possible to discover if the method has been annotated with A
(either in the class (easy) or in the implemented interface)?
What about the method parameter? Is it possible to dicover if and which parameter has been annotated with B
?
It seems that this is not possible with AspectJ and I need to use Java Reflection.
How would a solid solution look like?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可以在类对象上使用 getInterfaces() 并查询结果。
参数注释
方法注释
接口注释
类注释 Foo接口
测试类
输出
Its possible use
getInterfaces()
on the class object and query the result.parameter annotation
method annotation
interface with annotations
class with annotations and the Foo interface
Test Class
Output