我试图通过for循环实现敌人的“波浪”。基本上,当一个wave对象被调用时,它会接受一个int值来设置wave中的敌人数量。每个敌人都有自己的类,它是'敌人'的一个子类。我所坚持的是我如何能够在wave构造函数中传入第二个参数来设置创建哪个敌方子类,例如创建25个'Orcs'或者使用一种方法创建13个'Trolls'。任何帮助将不胜感激。创建多个子类对象
Q
创建多个子类对象
0
A
回答
1
这听起来像你想创建一个Enemy类的静态工厂方法,根据参数创建新的Enemy对象。喜欢的东西:
// EnemyType is an enum
public static Enemy createEnemy(EnemyType enemyType) {
switch (enemyType) {
case BASIC_MONSTER:
return new BasicMonster();
case ORC:
return new Orc();
case TROLL:
return new Troll();
case ..... // etc...
}
}
注意,我会用一些清洁剂的参数,如枚举,而不是一个int,以确保在传递的参数是正确的。否则,你的风险有诸如-24232在传递一个废话INT
0
您可以使用一个枚举
public enum EnemyType {
ORC{
@override
public Enemy create() {
return new Orc();
}
},
TROLL{
@override
public Enemy create() {
return new Troll();
}
}...etc;
public abstract Enemy create();
}
那么相关枚举传递到你的波法:
public Collection<Enemy> createWave(final int num, final EnemyType enemyType) {
final Collection<Enemy> enemies = new ArrayList<>(num);
for(int i=0;i<num;i++) {
enemies.put(enemyType.create());
}
return enemies;
}
如果您有很多differenet敌人类型的考虑通用工厂
public interface EmemyFactory<E extends Enemy> {
E create();
}
然后创建一个implem entation每个敌人类型,并将它们存储在枚举,而不是
public enum EnemyType {
ORC(new OrcFactory()),
TROLL(new TrollFactory()),
...etc;
private final EnemyFactory enemyFactory;
public EnemyType(final EnemyFactory enemyFactory) {
this.enemyFactory = enemyFactory;
}
public Enemy create() {
return enemyFactory.create();
}
}
而在去年和至少你可以使用一个小的反射,假设你的敌人有noargs构造:
public Collection<Enemy> createWave(final int num, final Class<? extends Enemy> enemyClass) {
final Collection<Enemy> enemies = new ArrayList<>(num);
for(int i=0;i<num;i++) {
enemies.put(enemyClass.newInstance());
}
return enemies;
}
这是凌乱和容易到运行时错误然而...
相关问题
- 1. Three.js创建多个对象
- 2. 创建多个Firebase对象
- 3. MultipleChoiceField创建多个对象
- 4. 创建多个对象
- 5. 多个simple_html_dom()对象创建
- 6. 创建子类对象是否也创建其超类的对象?
- 7. Javascript对象创建 - 创建多个对象
- 8. 在Python中创建多个类或多个对象?
- 9. 创建子类的对象数组
- 10. java在子类中创建对象
- 11. 创建多个子对象是否也强制在java中创建多个父对象?
- 12. 如何在它的基类中创建一个子类对象?
- 13. 创建一个返回子类对象的父类
- 14. 用单一形式创建多个对象(类似的类型)
- 15. 创建新类型时如何处理多个对象类型
- 16. C++,在抽象类中创建匿名子类对象
- 17. 创建一个鞋子对象
- 18. 参考现有对象创建子类对象
- 19. Java创建一个类的最多3个对象
- 20. Java创建一个包含多个对象的类的列表
- 21. 从多个变量类型创建一个对象
- 22. Python3,一次创建一个类的多个对象
- 23. 创建javascript骰子对象
- 24. 创建I类对象数组创建
- 25. 创建多个嵌套对象
- 26. 自动创建多个对象编号
- 27. Documentum xCP 2.0创建多个对象
- 28. 在Grails中创建多个域对象
- 29. jQuery多个可拖拽对象创建
- 30. 在java中创建多个对象oop
我不太确定你的意思,但是,你可以让你的构造函数接受两个参数即:public void Enemy(int a,int b) – noob 2013-02-16 12:26:35