gpt4 book ai didi

java - 多个注解

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:52:27 26 4
gpt4 key购买 nike

由于不可能在同一个目标上有重复的注释,我正在研究解决方法。我需要的可能是:

@Parent(sex="F", name="Alice")
@Parent(sex="M", name="Bob")
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")

我已经考虑添加另一个注释 @Relatives 来包含它们,将值成员声明为 Relative 注释的数组。

@Relatives({
@Parent(sex="F", name="Alice")
@Parent(sex="M", name="Bob")
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")
})

但是我不能定义这样的数组,因为@Parent 和@Sibling @interfaces 不能扩展任何@Relative 父类(super class)。

除了定义两个不同的数组 Sibling[] siblings 和 Parent[] parents 之外,还有其他方法吗?但这会产生类似的东西

@Relatives(
parents={
@Parent(sex="F", name="Alice"),
@Parent(sex="M", name="Bob")
}
siblings={
@Sibling(sex="M", name="Charlie")
@Sibling(sex="M", name="Dan")
@Sibling(sex="F", name="Eve")
}
)

最佳答案

在 1.8 中,您有一种半生不熟的可重复注释方式,请参阅 java.lang.annotation.Repeatable诀窍是您仍然需要声明您的@Parents 和@Siblings,但是:

  1. 使用时,包含的注解可以省略

  2. 在这种情况下,当扫描(内省(introspection))它们时,您会在它们包含的注释(@Parents@Siblings)中找到您的可重复注释。

    public @interface Parents {      Parent[] value();    }    // this says: will be repeated inside a `Parents` nest    @Repeatable(Parents.class)     public @interface Parent {      String name();      String sex() default "F";    }

then you can

@Parent(sex="F", name="Alice"),
@Parent(sex="M", name="Bob")
Child firstChild;

另见 "Repeating Annotations" on Oracles site

关于java - 多个注解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39736603/

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