为什么我在这里得到一个空的注释数组
根据 doc 和这个 答案我应该有“在以下代码中覆盖”(或类似的内容):
import java.lang.reflect.*;
import java.util.*;
import static java.lang.System.out;
class Test {
@Override
public String toString() {
return "";
}
public static void main( String ... args ) {
for( Method m : Test.class.getDeclaredMethods() ) {
out.println( m.getName() + " " + Arrays.toString( m.getDeclaredAnnotations()));
}
}
}
但是,我得到一个空数组。
$ java Test
main []
toString []
我缺少什么?
According to the doc and to this answer I should be having "Override" (or something similar) in the following code:
import java.lang.reflect.*;
import java.util.*;
import static java.lang.System.out;
class Test {
@Override
public String toString() {
return "";
}
public static void main( String ... args ) {
for( Method m : Test.class.getDeclaredMethods() ) {
out.println( m.getName() + " " + Arrays.toString( m.getDeclaredAnnotations()));
}
}
}
But, I'm getting an empty array.
$ java Test
main []
toString []
What am I missing?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为
@Override
注释具有Retention=SOURCE
,即它不会编译到类文件中,因此在运行时无法通过反射获得。它仅在编译期间有用。Because the
@Override
annotation hasRetention=SOURCE
, i.e. it is not compiled into the class files, and is therefore not available at runtime via reflection. It's useful only during compilation.我写这个例子是为了帮助我理解斯卡夫曼的答案。
I wrote this example to help me understand skaffman's answer.