Java 8通过使用" container"来支持可重复注释。注释:
@Repeatable(FooContainer.class)
@interface Foo {
String value();
}
@interface FooContainer {
Foo[] value();
}
@Foo("bar")
@Foo("baz")
public class SomeClass { }
我有一个库,我想支持Java 7(或更新版本)。该库广泛使用注释,并且可以从支持可重复注释中受益匪浅。
根据我的理解,容器注释即使在Java 7中也能工作,只有一个人必须使用它:
@FooContainer({@Foo("bar"),@Foo("baz")})
public class SomeClass { }
我最终会喜欢的是:如果我的库的用户使用的是Java 8,则用户将能够使用重复的注释。如果用户使用Java 7,他必须坚持手动编写容器注释。
这样的事情可能吗?
答案 0 :(得分:1)
您需要提供两个版本的库:
Foo
与@Repeatable
。Foo
和FooContainer
。不幸的是,您不能同时支持Java 7并使用一个版本的库重复注释。如果您希望客户能够重复注释,则必须将Foo
元注释为@Repeatable
。 java.lang.annotation.Repeatable
仅在Java 8中定义。因此,如果注释Foo
被元标注为@Repeatable
,则Foo
和SomeClass
都只能编译和运行在JDK 8及以上版本。 (它只能在JDK 8上运行,因为当加载SomeClass时,将加载Foo,并且将加载Foo上的任何元注释。)