Phi*_*der 18 java inheritance annotations
JavaDoc说如下:
AccessibleObject#getDeclaredAnnotations:
返回直接出现在此元素上的所有注释.与此接口中的其他方法不同,此方法忽略继承的注释.(如果此元素上没有直接出现注释,则返回长度为零的数组.)此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响.
返回此元素上的所有注释.(如果此元素没有注释,则返回长度为零的数组.)此方法的调用者可以自由修改返回的数组; 它对返回给其他调用者的数组没有影响.
由于getAnnotations是从类继承的java.lang.reflect.AccessibleObject,因此Field对象可以访问它.
据我所知,它们之间的唯一区别是getDeclaredAnnotations忽略了继承的注释.我在处理类时得到了它,但据我所知,Fields不能继承注释.
Phi*_*der 10
查看源代码给出了答案:
摘自java.lang.reflect.AccessibleObject:
/**
* @since 1.5
*/
public Annotation[] getAnnotations() {
return getDeclaredAnnotations();
}
/**
* @since 1.5
*/
public Annotation[] getDeclaredAnnotations() {
throw new AssertionError("All subclasses should override this method");
}
Run Code Online (Sandbox Code Playgroud)
因为Field不会覆盖getAnnotations():getDeclaredAnnotations()被调用.
所以这两种方法在java.lang.reflect.Field对象上调用时都会这样做.
(所以JavaDoc在我看来是错的)
另一种情况是java.lang.Class,它覆盖了两种方法(并且做了它的JavaDoc所说的);):
/**
* @since 1.5
*/
public Annotation[] getAnnotations() {
initAnnotationsIfNecessary();
return AnnotationParser.toArray(annotations);
}
/**
* @since 1.5
*/
public Annotation[] getDeclaredAnnotations() {
initAnnotationsIfNecessary();
return AnnotationParser.toArray(declaredAnnotations);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7596 次 |
| 最近记录: |