gpt4 book ai didi

java - 在维护对 Java 7 的支持的同时使用@Repeatable

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:28 25 4
gpt4 key购买 nike

Java 8 通过使用“容器”注解来支持可重复注解:

@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,他必须坚持手动编写容器注解。

这样的事情有可能吗?

最佳答案

您需要提供两个版本的库:

  • 一个旨在与 Java 8 一起使用,它对定义进行元注释Foo@Repeatable
  • 一个旨在与 Java 7 一起使用,它明确定义了 FooFooContainer

不幸的是,您的一个版本的库不能同时支持 Java 7 和重复注解。如果您希望客户端能够重复注释,则 Foo 必须元注释为 @Repeatablejava.lang.annotation.Repeatable 仅在 Java 8 中定义。因此,如果注释 Foo 被元注释为 @Repeatable,两者 FooSomeClass只能在JDK 8及以上编译运行。 (它只能在 JDK 8 上运行,因为当加载 SomeClass 时,将加载 Foo,并且将加载 Foo 上的任何元注释。)

关于java - 在维护对 Java 7 的支持的同时使用@Repeatable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29542534/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com