Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我应该将枚举作为参数传递还是传递其文本值_Java_Enums_Parameter Passing - Fatal编程技术网

Java 我应该将枚举作为参数传递还是传递其文本值

Java 我应该将枚举作为参数传递还是传递其文本值,java,enums,parameter-passing,Java,Enums,Parameter Passing,在设计一些接口和类时,我一直在考虑是否应该将enum作为参数或其文本值传递 在这一点上,我完全支持传递它的文本值,因为我在某个地方读到过一些我记不起来的关于传递枚举的耦合问题的文章 有人对此有什么看法吗?:) 通过枚举 public buy(Item item){} 按文字值传递 public buy(String itemValue){} 干杯。枚举是类,但具有一组预定义值。因此,您必须声明枚举并为其实例提供一个变量 试试这个例子: public class ItemDemo { p

在设计一些接口和类时,我一直在考虑是否应该将enum作为参数或其文本值传递

在这一点上,我完全支持传递它的文本值,因为我在某个地方读到过一些我记不起来的关于传递枚举的耦合问题的文章

有人对此有什么看法吗?:)

  • 通过枚举

    public buy(Item item){}
    
  • 按文字值传递

    public buy(String itemValue){}
    

  • 干杯。

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

    试试这个例子:

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

    我建议传递枚举值,因为它是强类型的。在您的示例中,如果“candy”和“apple”是“buy”方法的唯一有效参数,那么您可以在编译时强制使用枚举而不是字符串作为方法参数。

    在大多数情况下,我会传递实际的枚举类型(
    在本例中为Item
    ),而不是字符串表示形式。这确保了正确的类型,也是枚举的目的

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


    例如,如果一个应用程序有多个实例正在运行,并且您不能始终确保它们运行的是相同的版本,那么您可能只需要在它们之间传递字符串表示,然后尝试手动反序列化它们(使用
    valueOf()
    ),并以这种方式处理任何差异。

    肯定是通过枚举传递的。我的理由是:

  • buy
    的实现中,使用enum对象比使用字符串容易得多。例如,如果您确实需要进行切换等
  • 更好的可维护性。如果更改了字符串表示形式或可用的枚举值,则可以很容易地看到是否中断了任何内容,而当它转换为
    字符串时,就不那么容易看到了
  • 稍后查看
    buy
    的实现时,您将很容易看到如何处理每个不同的枚举值。当您将其作为
    字符串传递时,您可能不知道该方法中所有可能的输入值是什么以及它们是如何处理的

  • 嗨,路行者,我真的不明白。什么是声明anum并为其实例提供变量?你是说在枚举类中我们有成员数据吗?-1:枚举项不是类型。这还不足以编译。请看一下:
    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;
         }
       }