有没有办法从子工件接收枚举作为注释值?

问题描述 投票:0回答:1

因此,我有父工件(库),其中包含我的多个项目的通用逻辑。主要部分之一 - @Command 注释,然后在应用程序启动时收集所有带有传递值(目前为字符串)的注释方法,以便根据用户输入动态执行它们。 因此,在所有子项目中,我确实需要一个单独的类,其中每个命令都有字符串常量。看起来像这样:

public class Command {
    public static String SETTINGS = "TEXT_VALUE";
}

然后通过静态导入 Commands 类

import static Command.*
我可以像
@Command(SETTINGS)
一样使用它来执行逻辑的方法。

我想扩展这个值,为此,我认为最好的选择是使用枚举而不是字符串。问题是,父工件对子类/枚举一无所知。我可以在父级中创建接口或枚举 - 但枚举不能扩展任何内容,并且如果我要实现接口 - 由于某种原因,Java 注释无法接收接口作为值。每个子项目的命令列表都不同,因此我无法直接在父项目中定义枚举。 有一些解决方法来实现它吗?

(已经明白这是不可能的,因为注释值可以是类,但不能是对象。但将其保留在这里作为解决方案的最初想法 -)我正在考虑的一个想法 - 在父级中创建一个抽象类包,然后在子类中提供一个枚举方法,该方法将返回父类中定义的子类的实例。然后,我想,我将能够在父包注释中接收这个对象。

其他选项 - 在现有注释或字段中为我想要传递的每个附加参数创建单独的注释或字段。但是没有一个地方可以查看所有命令及其属性。 但老实说,如果我错过了什么并且还有更好的选择,我仍然在徘徊。

有什么意见吗?

java enums annotations aop
1个回答
0
投票

再考虑一下之后,对于任何对未来感兴趣的人来说,简短的答案是“不,到目前为止,不可能通过枚举或任何其他对象来提供更多数据”。

所以可能的解决方案仍然是相同的:

  1. 注释中的更多字段/更多具有硬编码值的注释
  2. 在子端实现的服务将返回每个命令的附加信息。该信息可以存储在枚举或其他地方,接口将由接口访问。这确实解决了问题,但需要在子项目方面进行更多初始设置,所以我也不喜欢它
  3. 将 JSON 作为字符串值传递。问题是它仍然应该是常量,不允许任何方法作为注释值。所以以后还是没有有效的方法来管理很多命令

也许我错过了一些选择,但对我来说,它们似乎比提到的更糟糕。所以我想就我而言,仍然需要坚持使用选项 1 并为每个命令提供更多常量。

© www.soinside.com 2019 - 2024. All rights reserved.