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

Oh *_*oon 5 java enums parameter-passing

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

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

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

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

    public buy(Item item){}
    
    Run Code Online (Sandbox Code Playgroud)
  2. 通过字面值

    public buy(String itemValue){}
    
    Run Code Online (Sandbox Code Playgroud)

干杯.

btr*_*eat 6

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


Nav*_*ris 6

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

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


sgo*_*les 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;
     }
   }
Run Code Online (Sandbox Code Playgroud)

  • -1:枚举条目不是类型。这甚至还没有接近编译。 (2认同)