gpt4 book ai didi

Java 注释 - 如何创建数组?

转载 作者:搜寻专家 更新时间:2023-11-01 03:19:57 25 4
gpt4 key购买 nike

我尝试使用嵌套的 JAVA 注释创建一个“ map ”。

public @interface EnvInstance {
Env env();
Instance instance();
}

public @interface Configuration {
String description();
EnvInstance[] envInstances() default {};
}

@Configuration(description = "Test", envInstances = {
@EnvInstance(env = Env.CERT, instance = Instance.FIRST),
@EnvInstance(env = Env.INTEGR, instance = Instance.SECOND),
@EnvInstance(env = Env.PROD, instance = Instance.FIRST),
...
}
)
public class TestObject {

}

这似乎可行,但有一件事我不知道如何实现。我想创建两组默认的 envInstances 配置,这样我就可以输入:

@Configuration(description = "Test", envInstances = SET_ONE)
public class TestObject {
}

@Configuration(description = "Test", envInstances = SET_TWO)
public class TestObject {
}

是否有可能创建内部注释的静态数组或类似的东西并将其传递给外部注释?

最佳答案

恐怕没有办法提取这个重复项。

您不能从常量 (read more) 向注释提供数组值。也不可能创建扩展另一个注释 ( read more ) 的注释。

我不知道上下文,但您是否考虑过将此信息传递给对象本身,并将其存储为一个字段,而不是通过注释?

另一个可能可行的解决方案是让这些类实现标记接口(interface)并改为注释接口(interface)。但是,注释不会被继承。如果你可以修改你的解析器(或任何正在读取注释的东西),你可以这样做:

@Retention(RetentionPolicy.RUNTIME)
public @interface X {
String[] value();
}

@X({"a", "b", "c"})
interface AnInterface {}

public static class TestClass implements AnInterface {}

public static void main(String[] args) {
// annotations are not inherited, empty array
System.out.println(Arrays.toString(TestClass.class.getAnnotations()));

// check if TestClass is annotated with X and get X.value()
Arrays.stream(TestClass.class.getAnnotatedInterfaces())
.filter(type -> type.getType().equals(AnInterface.class))
.map(type -> (Class<AnInterface>) type.getType())
.findFirst()
.ifPresent(anInterface -> {
String[] value = anInterface.getAnnotation(X.class).value();
System.out.println(Arrays.toString(value));
});
}

关于Java 注释 - 如何创建数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33629532/

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