【问题标题】:Defining an enum in Java在 Java 中定义枚举
【发布时间】:2011-11-02 12:48:05
【问题描述】:

我有一个 Java 类描述一个参数(名称:Param)和另一个类,我在其中声明和初始化大约 100 个这样的参数:

私有静态最终参数 param_name_1 = new Param(x, y, z);

我想将所有这些对象/实例放在一个枚举中并在那里初始化它们。最好的方法是什么?

===更新===

我询问了枚举的语法,但不是那样。

我的情况是 Param 是另一个 java 类,它有自己的参数、getter 和 setter 以及一个在括号之间有 3 个参数的构造函数:

公共参数(intx,int y,int z){ 这个.x = x; 这个.y = y; 这个.z = z; }

我在我的另一个类中声明并初始化了 100 个 Param 类的实例,如上所述。每个实例的每个 x、y 和 z 都是不同的。

枚举应该包含实例的声明,并且可能还初始化它们。

【问题讨论】:

  • 不清楚你在问什么。关于枚举语法?关于复制粘贴您的定义?

标签: java enums


【解决方案1】:

假设您询问的是枚举语法,那么您可以这样做(假设 x、y 和 z 是编译时常量)。

 public enum Param {
    param_name_1(1,2,3),
    param_name_2(3,4,5);

    private int x;
    private int y;
    private int z;

    private Param(int x, int y, int z) {
       this.x=x;
       this.y=y;
       this.z=z;
    }
 }

【讨论】:

    【解决方案2】:

    enum 是一种特殊类型的类,因此您可以声明构造函数、字段和方法以及实现接口。但是,他们不能extend其他类。

    在这种情况下,我建议使用 final 字段和 getter,如下所示:

    public enum Param {
    
        PARAM_A(1, 2, 3), 
        PARAM_B(4, 5, 6), 
        PARAM_C(1, 3, 5);
    
        private final int x;
        private final int y;
        private final int z;
    
        private Param(int x, int y, int z) {
            this.x = x;
            this.y = y;
            this.z = z;
        }
    
        public int getX() {
            return x;
        }
    
        public int getY() {
            return y;
        }
    
        public int getZ() {
            return z;
        }
    }
    

    【讨论】:

    • 如果字段是最终的,您不妨将它们公开并直接访问它们
    • 你可以,但这种推理同样适用于所有类的所有 final 字段,这不是“java”方式。访问器方法是行业标准。
    • 它们不仅仅是行业标准。它们是保持封装的方式。如果您改变主意并决定以另一种方式表示内部状态,或者从其他字段计算其中一个字段,您可以保持 getter 不变。
    【解决方案3】:

    我想这就是你想要的

    class Param
    {
            private int x, y, z;
            public Param(int x, int y, int z)
            {
                    this.x = x; this.y = y; this.z = z;
            }
    }
    
    public class t
    {
    
            private enum ParamVals
            {
                    VAL1(new Param(0,0,0)),
                    VAL2(new Param(1,1,1));
    
                    private Param paramVal;
    
                    private ParamVals(Param paramVal)
                    {
                            this.paramVal = paramVal;
                    }
    
                    public Param getVal()
                    {
                            return paramVal;
                    }
            }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      相关资源
      最近更新 更多