[英]Enums reference a class Java
我在Terrain类中有一个枚举,该枚举列出了诸如Destroyer,Cruiser,Aegis Cruiser ext之类的可用单元,并且我正在生成单元,因此我从单元列表中选择一个随机枚举,然后我想像该Unit test = new RandomEnumUnit();
那样创建该单元Unit test = new RandomEnumUnit();
附带一提, Terrain
类扩展到Unit
类。
如何添加属性或使枚举引用到units类?
首先,您不能真正“将类放入枚举”,如果要使用enum
,则必须执行以下操作:
final Random rand = new Random();
enum UnitType {
Destroyer, Cruiser, AegisCruiser
}
public Unit newRandomEnumUnit() throws Exception {
final UnitType selectedUnitType = UnitType.values()[rand.nextInt(UnitType.values().length)];
switch (selectedUnitType) {
case Destroyer:
return new Destroyer();
case Cruiser:
return new Cruiser();
case AegisCruiser:
return new AegisCruiser();
default:
throw new Exception("Unit type not found !");
}
}
并这样称呼它:
Unit test = newRandomEnumUnit();
但是,如果您有很多类,则必须在switch
添加很多用case
,因此,可以使用一系列类和一些反射,例如:
final Random rand = new Random();
final static Class<?>[] units = {Destroyer.class, Cruiser.class, AegisCruiser.class};
public Unit newRandomUnit() throws InstantiationException, IllegalAccessException {
final Class<?> selectedUnitClass = units[rand.nextInt(units.length)];
return (Unit)selectedUnitClass.newInstance();
}
并这样称呼它:
Unit test = newRandomUnit();
只要确保您所有的类都扩展Unit
,并且它们都有一个空的构造函数即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.