Java:方法中的枚举参数

Jea*_*lea 29 java parameters methods enums

我有一个方法可以说:

private static String drawCellValue(
    int maxCellLength, String cellValue, String align) { }
Run Code Online (Sandbox Code Playgroud)

你可以注意到,我有一个名为align的参数.在这个方法里面,我将对if值是'left'还是'right'有一些if条件.将参数设置为String,显然我可以传递任何字符串值..我想知道它是否可能将Enum值作为方法参数,如果是,如何?

以防有人想到这个; 我想过使用布尔值,但我真的不喜欢它.首先,如何将真/假与左/右相关联?(好吧,我可以使用注释但我仍然觉得它很脏)其次,我可能会决定添加一个新值,比如'justify',所以如果我有两个以上的可能值,那么绝对不能使用布尔类型.

有任何想法吗?

Car*_*rra 59

这应该这样做:

private enum Alignment { LEFT, RIGHT };    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  if (align == Alignment.LEFT)
  {
    //Process it...
  }
}
Run Code Online (Sandbox Code Playgroud)


Jos*_*ald 21

甚至更酷的枚举你可以使用开关:

switch (align) {
   case LEFT: { 
      // do stuff
      break;
   }
   case RIGHT: {
      // do stuff
      break;
   }
   default: { //added TOP_RIGHT but forgot about it?
      throw new IllegalArgumentException("Can't yet handle " + align);

   }
}
Run Code Online (Sandbox Code Playgroud)

枚举很酷,因为异常的输出将是枚举值的名称,而不是某个任意的int值.


Zam*_*mir 5

我更喜欢这个。减少if/switch,就做。

private enum Alignment { LEFT, RIGHT;

void process() {
//Process it...
} 
};    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  align.process();
}
Run Code Online (Sandbox Code Playgroud)

当然,它可以是:

String process(...) {
//Process it...
} 
Run Code Online (Sandbox Code Playgroud)

  • +1 这个想法是正确的。但是,过程方法应该是抽象的,LEFT 和 RIGHT 应该各自提供它的实现。 (4认同)