2011-10-31 70 views
1

我已经设置的常量,如:如何在java枚举中搜索?

public static final String CONST1="abc"; 
public static final String CONST2="cde"; 
public static final String CONST3="ftr"; 
................................... 
public static final String CONSTN="zya"; 

在应用程序中,我需要检查,如果某个值在某些组常量,如:

if (String val in [CONST1,CONST2,CONST3]) { 
do something;} 
else { 
.... 

是否有可能有这样做枚举?还是更好地使用一个集合或一个数组? 谢谢。

回答

6

你需要的是Enum.valueOf()

返回指定枚举类型与 指定名称的枚举常量。该名称必须完全匹配用于在此类型中声明枚举常量的标识符 。 (多余的空格 字符是不允许的。)

这里是我通常用枚举工作,并有可能当一个例子“坏”数据的到来。

public class EnumTest 
{ 
    public static void main(final String[] args) 
    { 
     final Option o = Option.safeValueOf(args[0]); 
     switch(o) 
     { 
      case CHOICE_A: // fall through 
      case CHOICE_B: // fall through 
      case CHOICE_C: // fall through 
       System.out.format("You selected %s", o); 
       break; 
      case CHOICE_D: 
       System.out.format("You selected %s", o); 
       break; 
      default: 
       System.out.format("Default Choice is %s", o); 
     } 
    } 

    public enum Option 
    { 
     UNRECOGNIZED_CHOICE, CHOICE_A, CHOICE_B, CHOICE_C; 

     // this hides the Exception handling code 
     // so you don't litter your code with try/catch blocks 
     Option safeValueOf(final String s) 
     { 
      try 
      { 
       return Option.valueOf(s); 
      } 
      catch (final IllegalArgumentException e) 
      { 
       return UNRECOGNIZED_CHOICE; 
      } 
     } 
    } 
} 

,你也可以转换将Array的值从Option.values()转换为EnumSet,然后搜索它们并避免可能的Exception的开销,如果您认为它会收到大量不良数据。

+0

好的回应。涵盖了各个方面,写得很好。 – RockyMM

4

您可以使用枚举在switch语句@Dims建议:

switch (val) { 
    case CONST1: case CONST2: case CONST3: 
     do_something(); 
    break; 
    case CONST4: 
     do_something_else(); 
    break; 
    default: 
     // we should not be here?!? 
    break; 
} 

,我认为val是一个枚举。你可以将其创建为@贾罗德 - 罗伯逊建议:

val = MyEnum.valueOf(stringValue);   
+1

如果'stringValue'不会是枚举值之一,那么一定要在try-catch中包装'valueOf()'。另外请注意,如果这种情况发生了很多,您将花费构建Exception对象并通过try-catch机制的一小部分时间。 – dtyler

2

退房java.util.EnumSet中 - 这是枚举优化的一组特殊的实现。