2012-02-07 140 views
4

当我创建一个EnumSet并通过函数发送它时,我发现自己无法达到EnumSet中设置的Enum值。我所能做的就是将它与原始设置进行比较,并检查它是否存在。我不希望那样做,因为这迫使我浪费代码行,并迫使我每次都接触到Original Enum类。通过Java中的EnumSet迭代?

for(Action a : Action.values()) 
    { 
     if(stateCommands.contains(a)) 
     { 
      System.out.println(a.getCommand() + a.getDescription()); 
     } 

    } 

我想迭代通过stateCommands并能够看到它的内容。

我应该如何继续?

回答

10
for(StateCommand command : stateCommands) { 
    // do whatever 
} 

就像任何其他Set。或者,如果您需要做更复杂的事情,只需使用stateCommands.iterator()即可。

1

如果离开了EnumSet通用的,下面就工作:

public void StateLoop(EnumSet stateCommands){ 
    //won't work b/c stateCommands is treated as a generic Object 
    for(StateCommand command : stateCommands) { 
     // do whatever 
    } 
} 

但是,如果提供了EnumSet一个类型也将正常工作:

public void StateLoop(EnumSet<StateCommand> stateCommands){ 
    for(StateCommand command : stateCommands) { 
     // do whatever 
    } 
}