Java-使用注释/标记查找要创建的对象

Java-使用注释/标记查找要创建的对象,java,object,tags,annotations,Java,Object,Tags,Annotations,假设您有一个名为Human的类,还有一堆其他类都扩展了Human(John、Sally、Mark)。Human有注释“@Tags({“Human”})”,John有注释“@Tags({“John”})”等等。。所有类都有相应的标记 我的问题是:如何使用这些标记来确定要创建哪个对象 因此,用户将输入“john”、“sally”或“mark”,我想创建相应的对象…查看: 一种软件设计模式,可以在运行时选择算法的行为 您可以使用此模式将输入匹配到工厂,或者作为将名称映射到给定类类型的enum的一部分(

假设您有一个名为Human的类,还有一堆其他类都扩展了Human(John、Sally、Mark)。Human有注释“@Tags({“Human”})”,John有注释“@Tags({“John”})”等等。。所有类都有相应的标记

我的问题是:如何使用这些标记来确定要创建哪个对象

因此,用户将输入“john”、“sally”或“mark”,我想创建相应的对象…

查看:

一种软件设计模式,可以在运行时选择算法的行为

您可以使用此模式将输入匹配到工厂,或者作为将名称映射到给定类类型的
enum
的一部分(尽管这种方法存在几个“硬编码”问题)

至于对象实例的构造,我建议您也看看,并将两者结合起来,以抽象的方式创建这些对象


我还建议您不要像这样标记对象,因为您正在根据代码库硬编码用户输入期望。至少将这些期望外部化到配置文件(
.properties
.xml
)中,这样输入的映射可以独立于代码进行更改。

我在一个项目中遇到过类似的要求

这就是我所做的

  • 设计阅读类的策略。:这是必需的,因为这些类在任何代码中都没有直接引用。因此,任何类加载器都不会自动处理这些类

  • 生成工厂:将注释的范围设为运行时。这将允许您处理已读取的类文件,并从中提取自定义注释值。然后可以根据factory类中的注释注册此类的名称

  • 使用工厂生成对象:现在您有了一个工厂,当您传递标记名时,它可以返回类的对象。使用反射创建对象


  • 要了解有关factory模式的更多信息,请参阅链接:

    注释是否必不可少?对我来说,它们似乎是硬编码,或者这个例子是故意隐藏细节/组织/等等?