Java注解:将注解属性的值传递给另一个注解

3

我有一个接口Resource和几个实现它的类,例如AudioVideo... 此外,我创建了自定义注释MyAnnotation,其中包含Class类型参数:

 @MyAnnotation(type = Audio.class)
 class Audio {
 ...
 }

 @MyAnnotation(type = Video.class)
 class Video{
 ...
 }

在代码的其他地方,我必须使用接口Resource作为返回类型:

public class Operations<T extends Resource> {
    ....
    @OtherAnnotation(type = Audio.class (if audio), type = Video.class (if video) )
    T getResource();
    ....
}

问题是如何根据返回的资源类型适当地注释注释@OtherAnnotation

其他的注解是由您定义的吗? - Laurentiu L.
1个回答

3

您所要求的是注解属性的动态值。

然而,注解只能在编译时设置,这就是它们的值只能是编译时常量的原因。您只能在运行时读取它们。


有一个类似的问题,其中有人尝试生成注释值,答案解释了为什么没有办法动态生成注释中使用的值。在那个问题中,有人试图使用静态方法生成的最终类变量。


有一些注释处理器可以通过处理占位符来提供更多的灵活性。但我认为这并不适合你的情况,因为你想要在运行时获取动态值。

这个答案提到了Spring在Value注释中使用表达式语言(expression language),其中占位符(@Value("#{systemProperties.dbName})")将被定义的属性源之一的数据覆盖(如spring boot示例)。

无论如何,你都需要重新思考你的架构。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接