繁体   English   中英

枚举引用Java类

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM