枚举变量的instanceof

时间:2014-11-13 13:11:00

标签: java enums instanceof

编辑:请跳过阅读此问题的详细信息,这是一个简单的疏忽。

原始信息:

显然,在枚举变量上的实例是一个奇怪的事情,例如:

这是枚举定义:

public enum CardType {
  CLERIC,
  UNDEAD,
  TACTICIAN;
}

这是在这个枚举的变量上使用instanceof:

public SimpleDeckBuilder(Object... definition) {
  for (Object def : definition) {
    if (def instanceof CardType) {
      allowedCardTypes.add((CardType) def);
    }
    if (def instanceof CardDef) {
      allowedCards.add((CardDef) def);
    } else {
      Logger.getLogger(this.getClass().getName()).severe("Unsupported def class " +   def.getClass().getCanonicalName());
      throw new RuntimeException("Unsupported definition for SimpleDeckBuilder " +   StringUtils.toString(def));
    }
  }
  ...

这实际上不起作用

Deck clericDeck1 = new SimpleDeckBuilder(CardType.CLERIC).build(5);

带来异常:

SEVERE: Unsuported def class heroes.CardType

java.lang.RuntimeException: Unsupported definition for SimpleDeckBuilder heroes.CardType               Object {  CLERIC: CLERIC  UNDEAD: UNDEAD  TACTICIAN: TACTICIAN  }

如何检查给定变量是否实际上是给定的枚举类型?

3 个答案:

答案 0 :(得分:1)

一个简单的疏忽:

if (def instanceof CardDef) {

应该是

else if (def instanceof CardDef) {

答案 1 :(得分:0)

if中的第一个SimpleDeckBuilder之后缺少一个“其他”,此问题是人为错误

答案 2 :(得分:0)

if (def instanceof CardDef) {

之前缺少“其他”

因此,在枚举为CardType的情况下,它进入第一个“if”子句并完成工作,但它也会在第二个内部检查“cardDef”,因为它是一个“CardType”它出现在打印错误的else子句中。