默认的Java注释值:规范相同的实例?

时间:2017-04-20 00:44:01

标签: java

在我的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默认值的同名值?

1 个答案:

答案 0 :(得分:0)

查看注释成员的默认值如何存储在Oracle的实现中(java.lang.reflect.Method#annotationDefault),可疑需要 来缓存单个实例