在我的JRE上,以下测试通过:
public static @interface Bar {}
@Retention(RetentionPolicy.RUNTIME)
public @interface Foo
{
Bar value() default @Bar;
}
@Foo
public Object default1;
@Foo
public Object default2;
@Foo(@Bar)
public Object specified;
@Test
public void test() throws NoSuchFieldException, NoSuchMethodException
{
Foo d1 = getClass().getField("default1").getAnnotation(Foo.class);
Foo d2 = getClass().getField("default2").getAnnotation(Foo.class);
Foo s = getClass().getField("specified").getAnnotation(Foo.class);
Assert.assertSame(d1.value(), d2.value());
Assert.assertNotSame(d1.value(), s.value());
}
这两个断言背后的行为是由Java指定的吗?这是一个可靠的条件来检测开发人员何时提供了一个值(equals
默认值的同名值?
答案 0 :(得分:0)
查看注释成员的默认值如何存储在Oracle的实现中(java.lang.reflect.Method#annotationDefault
),可疑需要 来缓存单个实例