Java:方法中的枚举参数

我有一个方法可以说:

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

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

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

有任何想法吗?

这应该这样做:

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

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

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

枚举很酷,因为exception的输出将是枚举值的名称,而不是某个任意的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... } 

当然,你可以使用枚举。 会有类似下面的工作吗?

 enum Alignment { LEFT, RIGHT } 

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

如果要使用布尔值,可以将align参数重命名为alignLeft。 我同意这个实现不是那么干净,但是如果你没有预料到很多变化而且这不是一个公共接口,那么它可能是一个不错的选择。

您也可以重复使用SwingConstants。{LEFT,RIGHT}。 它们不是枚举,但它们确实存在并且在许多地方使用。

我不太确定我会使用枚举作为一个完整的类 – 这是一个面向对象的语言,面向对象的最基本的原则之一是一个类应该做一件事并且做得好。

enum作为一个enum做得很好,一个class级作为一个class级做得很好。 混合两者我有一种感觉会让你陷入麻烦 – 例如,你不能将枚举的实例作为参数传递给方法,主要是因为你不能创建枚举的实例。

所以,即使你可能能够enum.process()并不意味着你应该。

您可以在所述参数中使用枚举,如下所示:

 public enum Alignment { LEFT, RIGHT } private static String drawCellValue( int maxCellLength, String cellValue, Alignment align) {} 

那么你可以使用switch或if语句实际对所述参数做一些事情。

 switch(align) { case LEFT: //something case RIGHT: //something default: //something } if(align == Alignment.RIGHT) { /*code*/}