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... }