数组作为java中枚举构造函数的参数

时间:2014-04-23 14:24:33

标签: java collections enums composite-key

我在double []中有5个预定义值的数据集:

A = {1.5, 1.8, 1.9, 2.3, 2.7, 3.0} 
B = {1.2, 1.8, 1.9, 2.4, 2.9, 3.1} 
.
.
E = {1.4, 1.7, 1.8, 1.9, 2.3, 2.9} 

如何在枚举中表示它? 我想把它编码为:

private enum Solutions{
 A(double[]),
 B(double[]),
 C(double[]),
 D(double[]),
 E(double[]) ;

 private double[] val;

 private Solutions(double[] pVal){
   this.val = pVal;
 }

}

这可能吗?

java中最好的数据类型或数据结构代表什么? 除了上面的double []数组,用户还可以定义自己的自定义数组。

请提出任何建议。

3 个答案:

答案 0 :(得分:5)

我会使用varargs作为您的潜在数字:

private Solutions(double... values) {
    this.val = values;
}

这将允许您传递任何可用的值:

A(12.4, 42.4, 30.2, 1.3),
B(39.2, 230.3, 230.0),
//etc...

答案 1 :(得分:2)

@Rogue的回答是正确而且非常简洁,但对于我们这些不知道如何将数组文字实例化为参数的人,或者你非常不幸并且不能使用Java 5+(我高度怀疑这一点)

你非常接近。您只需要实例化双数组

private enum Solutions {
    A(new double[] {1.5, 1.8, 1.9, 2.3, 2.7, 3.0}),
    B(new double[] {1.2, 1.8, 1.9, 2.4, 2.9, 3.1}),
    C(new double[] {}),
    D(new double[] {}),
    E(new double[] {1.4, 1.7, 1.8, 1.9, 2.3, 2.9} ) ;

    private double[] val;

    private Solutions(double[] pVal) {
        this.val = pVal;
    }
}

答案 2 :(得分:0)

感谢所有答案,它们对我非常有用。 到目前为止,我一直在研究这个问题,这里有一个代码可以接受枚举的自定义值。

public class X {
    private enum Solutions{
        A (new double [] {1.5, 1.8, 1.9, 2.3, 2.7, 3.0} ),
        B (new double [] {1.2, 1.8, 1.9, 2.4, 2.9, 3.1} ),
        C (new double [] {1.3, 1.7, 0.9, 1.4, 2.2, 3.1} ),
        D (new double [] {1.2, 1.4, 1.5, 2.6, 1.9, 3.1} ),
        E (new double [] {1.4, 1.7, 1.8, 1.9, 2.3, 2.9} ),
        CUSTOM (new double [] {0.0, 0.0, 0.0, 0.0, 0.0, 0.0} );

        private double[] val;

         private Solutions (double[] pVal) {
           val = pVal;
         }

         public double[] getVal(){
             return this.val;
         }

         public void setVal(double[] pVal){
             val = pVal;
         }

    }

    public X() {
        // TODO Auto-generated constructor stub
    }

    public static void main(String[] args){
        Solutions a = Solutions.A;
        System.out.println("enum Solution A at index 0 is: " + a.getVal()[0] );

        Solutions custom = Solutions.CUSTOM;
        System.out.println("enum Solution Custom  at index 0 is: " + custom.getVal()[0] );

        double[] custArray = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0};
        custom.setVal(custArray);

        System.out.println("enum Solution Custom at index 0 after modification is: " + custom.getVal()[0] );

    }
}

现在我与这个问题有关的最后一个问题是: 是否有自动方式强制只接受double []长度= 6(特定长度数组) 或者我必须自己检查一下?

让我们说......有没有办法像这样编写枚举的成员变量:

private double[6] val;

而不是

private double[] val;