gpt4 book ai didi

java - 如何制作保留泛型信息的@Documented 注释?

转载 作者:行者123 更新时间:2023-11-30 09:20:03 25 4
gpt4 key购买 nike

我目前定义了这个注解:

@Documented
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
@Beta
public @interface Needs
{
Class<?>[] value();
}

问题是虽然我能做到:

@Needs({SomeClass.class, OtherClass.class})

我做不到,例如:

@Needs(Map<String, SomeClass>)

目的是将其记录下来并保留上述通用信息。可能吗?

最佳答案

Java 语言规范 writes :

It is a compile-time error if the return type of a method declared in an annotation type is not one of the following: a primitive type, String, Class, any parameterized invocation of Class, an enum type (§8.9), an annotation type, or an array type (§10) whose element type is one of the preceding types.

此限制的原因是注释值在编译时计算,并且只存储值。因此,这些值不能是任意对象,因为不清楚如何将它们存储在类文件中,并在运行时解码它们。

通常的解决方案是嵌套注释技巧:

public @interface Needs {
Need[] value();
}

public @interface Need {
String key();
Class value();
}

然后你可以像这样使用

@Needs([
@Need(key = "aKey", value = A.class)
@Need(key = "anotherKey", value = Another.class)
])

关于java - 如何制作保留泛型信息的@Documented 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17629883/

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