我試圖通過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. 從另一個子類對象創建子類對象
- 2. 在類中創建多個對象
- 3. 創建多個對象
- 4. 多少個對象創建
- 5. Three.js創建多個對象
- 6. 多個simple_html_dom()對象創建
- 7. 創建多個對象
- 8. MultipleChoiceField創建多個對象
- 9. 創建多個Firebase對象
- 10. 創建多個對象
- 11. 創建子類對象是否也創建其超類的對象?
- 12. Javascript對象創建 - 創建多個對象
- 13. 創建子類的對象數組
- 14. 創建子類對象的ArrayList
- 15. java在子類中創建對象
- 16. 在Python中創建多個類或多個對象?
- 17. 創建類對象
- 18. 創建類對象
- 19. 創建多個子對象是否也強制在java中創建多個父對象?
- 20. 如何在它的基類中創建一個子類對象?
- 21. 創建一個返回子類對象的父類
- 22. 多對象視圖行爲 - 爲HasTraits子類創建編輯器
- 23. 抽象對象或創建類對象
- 24. 在創建對象/類期間調用對象/類的多個成員函數
- 25. 用單一形式創建多個對象(類似的類型)
- 26. 創建新類型時如何處理多個對象類型
- 27. 一個子類可以創建抽象類型超類的對象嗎?
- 28. Django的 - 創建對象和子對象
- 29. 如何創建子類對象的java抽象類列表
- 30. C++,在抽象類中創建匿名子類對象
我不太確定你的意思,但是,你可以讓你的構造函數接受兩個參數即:public void Enemy(int a,int b) – noob 2013-02-16 12:26:35