您好,我的游戏项目遇到问题,因为我需要“扩展”类,这些类的功能略有不同,并且创建仅具有不同名称的实体实例将无法正常工作,因为某些类已扩展。
基本上我有一个实体类,其中不同的实体扩展和实现不同的类,但我想学习仅通过使用枚举来创建每个类的实例的最佳方法。例如:new Entity(Enum.ZOMBIE) 或 new Entity(Enum.SPIDER)
我这样做是因为我的生成器被设计为根据用户输入生成不同类型的生物,如果我使用 else if 或 switch 方法,它将变得非常非常长。
您将如何解决这个问题?也许我的主类中有一个 switch/case 并返回修改后的类的实例?
抱歉,如果这没有意义,我无法解释它应该如何工作。
谢谢。
最佳答案
您需要一个查找表来存储类的名称以及创建该类的实例的方法。
假设您有一个 Entity
类和几个扩展它的类:Zombie
、Spider
、Hero
。您定义一个创建实体的接口(interface):
@FunctionalInterface
interface EntityFactory {
Entity create();
}
还有一个“表”来存储从名称到此接口(interface)的实例的映射:
Map<String, EntityFactory> factories = new HashMap<>();
然后注册你的子类工厂:
factories.put("Zombie", Zombie::new);
factories.put("Spider", Spider::new);
factories.put("Hero", Hero::new);
还有一个执行查找并调用适当工厂的 util 方法:
Entity create(String name) {
EntityFactory factory = factories.get(name);
if (factory == null) {
throw new NoSuchElementException();
}
return factory.create();
}
现在,只要注册所有实体类,您就可以根据用户输入创建实体:
Entity spider0 = create("Spider");
Entity hero0 = create("Hero");
关于java - 如何使用枚举作为标识符创建类的不同实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40669323/