因此,假设您有一个名为 Human 的类,以及一堆其他类都扩展了 Human(John、Sally、Mark)。Human 有注解“@Tags({"human"})”,John 有注解“@Tags({"john"})”等等。所有类都有对应的标签。
我的问题是:如何使用这些标签来确定要制作的对象?
就像,用户将输入“john”“sally”或“mark”,我想制作相应的对象......
因此,假设您有一个名为 Human 的类,以及一堆其他类都扩展了 Human(John、Sally、Mark)。Human 有注解“@Tags({"human"})”,John 有注解“@Tags({"john"})”等等。所有类都有对应的标签。
我的问题是:如何使用这些标签来确定要制作的对象?
就像,用户将输入“john”“sally”或“mark”,我想制作相应的对象......
我在一个项目中遇到过类似的要求。
这就是我所做的,
设计读取类的策略 :这是必需的,因为在您的任何代码中都没有直接引用这些类。因此这些类不会被任何 ClassLoader 自动处理。使用 Class.forName() 动态加载类
生成工厂:将注释的范围设为运行时。这将允许您处理已阅读的类文件并从中提取自定义注释值。然后你可以在工厂类的注解中注册这个类的名字。
使用工厂生成对象:现在您有一个工厂,当您传递标签名称时,它可以返回您的类的对象。使用反射创建一个对象。
要了解更多关于工厂模式的信息,请参考链接:工厂模式