2

Java 原生支持注解。

我想知道当我调用时obj.getAnnotation(Test.class),java 是否将类元数据存储在任何类型的缓存中。

我对反射有同样的问题,例如:

for (Method method : obj.getDeclaredMethods()) {

        if (method.isAnnotationPresent(Test.class)) {

            Annotation annotation = method.getAnnotation(Test.class);
            Test test = (Test) annotation;

        }
}
4

2 回答 2

2

缓存行为不是该getAnnotation方法的“契约”的一部分,但是(至少在 openjdk 中)它确实发生了

于 2017-03-01T21:40:07.580 回答
0

不知道缓存是什么意思,但 JVM 以特殊结构存储在运行时可见的所有类、字段和方法注释,这使得它们可以通过反射 API 调用使用。您可以在此处找到有关此的更多信息。

希望这就是你要找的。

于 2017-03-01T21:39:18.353 回答