Java:方法中的Enum参数

时间:2020-03-06 14:48:48  来源:igfitidea点击:

我有一个方法可以说:

private static String drawCellValue(
    int maxCellLength, String cellValue, String align) { }

如我们所见,我有一个名为align的参数。在此方法中,我将对值是"左"还是"右"有一些if条件。.将参数设置为String,显然我可以传递任何字符串值..我想知道是否有可能具有一个Enum值作为方法参数,如果是的话,怎么做?

以防万一有人想到这个;我考虑过使用布尔值,但我并不喜欢它。首先,如何将true / false与left / right关联? (好吧,我可以使用注释,但是我仍然觉得它很脏),其次,我可能决定添加一个新值,例如'justify',因此,如果我有两个以上的可能值,则绝对不能使用布尔型。

有任何想法吗?

解决方案

这应该做到这一点:

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

当然,我们可以使用一个枚举。可以进行以下工作吗?

enum Alignment {
    LEFT,
    RIGHT
}

私有静态String drawCellValue(int maxCellLength,String cellValue,对齐方式对齐){}

如果要使用布尔值,则可以将align参数重命名为alignLeft之类的东西。我同意这种实现方式不是很干净,但是如果我们不期望有太多更改并且这不是公共接口,那么它可能是一个不错的选择。

我们还可以重用SwingConstants。{LEFT,RIGHT}。它们不是枚举,但是它们确实已经存在并在许多地方使用。

带有枚举的器甚至更酷,我们可以使用switch:

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);

   }
}

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

我更喜欢这个。
减少if / switch,只是这样做。

private enum Alignment { LEFT, RIGHT;

void process() {
//Process it...
} 
};    
String drawCellValue (int maxCellLength, String cellValue, Alignment align){
  align.process();
}

当然,
有可能:

String process(...) {
//Process it...
}