我应该将枚举作为参数传递或传递其文字值

时间:2011-06-12 02:52:33

标签: java enums parameter-passing

我在设计一些接口和类时正在考虑是否应该将枚举作为参数或其文字值传递。

在这个时刻,我完全是为了传递它的字面值,因为我读过一些我不记得关于通过枚举的耦合问题的地方。

有没有人对此有任何意见? :)

public enum Item{
CANDY("candy"), APPLE("apple");
}
  1. 通过枚举

    public buy(Item item){}
    
  2. 通过字面值

    public buy(String itemValue){}
    
  3. 干杯。

4 个答案:

答案 0 :(得分:6)

我建议传递枚举值,因为它的类型更强。在您的示例中,如果“candy”和“apple”是“buy”方法的唯一有效参数,则可以在编译时通过要求枚举而不是String作为方法参数来强制执行该操作。

答案 1 :(得分:6)

绝对通过枚举。我的理由是:

  1. buy的实现中使用枚举对象而不是字符串会更容易。例如,如果您确实需要切换等。
  2. 更好的可维护性。如果您确实更改了字符串表示或可用的枚举值,则可以轻松查看是否中断了任何内容,而在将其转换为String时则不容易看到。
  3. 稍后查看buy的实现时,您将能够轻松地查看每个不同的枚举值的处理方式。当您将其作为String传递时,您可能不知道查看方法所有可能的输入值以及它们的处理方式。

答案 2 :(得分:3)

在大多数情况下,我会传递实际的枚举类型(在此示例中为Item)而不是String表示。这确保了正确的输入,这是Enums的目的。

您可能希望传递字符串表示形式(从Enum.name()获取)的一种情况是由于序列化/版本控制问题。

例如,如果您运行了多个应用程序实例并且无法始终确保它们运行相同的版本,您可能只想在它们之间传递String表示形式,并尝试手动反序列化它们(使用valueOf())并以这种方式处理任何差异。

答案 3 :(得分:0)

枚举是类,但具有一组预定义值。因此,您必须声明枚举并为其实例提供变量。

试试这个例子:

public class ItemDemo {

public enum Item { 
    CANDY("candy"), APPLE("apple"); 
   }

CANDY c;
APPLE a;

public ItemDemo(String name, int age, double money, CANDY c, APPLE a) {
       this.c= c;
       this.a= a;
     }
   }