编辑:请跳过阅读此问题的详细信息,这是一个简单的疏忽。
原始信息:
显然,在枚举变量上的实例是一个奇怪的事情,例如:
这是枚举定义:
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 }
如何检查给定变量是否实际上是给定的枚举类型?
答案 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子句中。