消除多个构造函数中的冗余

时间:2012-04-14 01:18:39

标签: java constructor redundancy

如果有人能告诉我我的代码是否冗余(如果是,可能的解决方案来消除冗余),我将非常感激。

public class Question {
  private Queue<Double> a;

  public Question(double XXX) {
     a = new LinkedList<Double>();  // REDUNDANT?
     ......
  }

  public Question(double[] YYY) {
     a = new LinkedList<Double>();  // REDUNDANT?
     ......
  }
}

基本上,一个构造函数接受一个double值,而另一个构造函数接受一个双数组数组。有没有办法只实例化一次Queue

5 个答案:

答案 0 :(得分:3)

使用Java 7和NetBeans或其他IDE时,IDE可能会标记

a = new LinkedList<Double>();

多余,您可以使用

a = new LinkedList<>();

代替。但是,如果您只是询问代码中的实际冗余,请使用:

public class Question {
  private Queue<Double> a;

  public Question() {
     a = new LinkedList<>();
  }

  public Question(double XXX) {
     this();
     ......
  }

  public Question(double[] YYY) {
     this();
     ......
  }
}

答案 1 :(得分:3)

您可以在声明时实例化变量。

public class Question {
   private Queue<Double> a = new LinkedList<Double>();

   ...
 }

答案 2 :(得分:2)

您可以使用this运算符使用适当的参数调用另一个构造函数。

答案 3 :(得分:1)

将它放在字段声明中:

private Queue<Double> a = new LinkedList<Double>();

答案 4 :(得分:1)

您可能还想考虑这个问题:

public class Question {
    private Queue<Double> a;

    public Question(double ... ds) {
        a = new LinkedList<>(Arrays.asList(ArrayUtils.toObject(ds)));
    }
}

这使用varargs构造函数,您可以向其传递一个double,多个double或一个double数组。所以你可以这样做:

new Question(1, 2, 3);
new Question(1);
new Question(new double[] { 1, 2, 3 } );

注意: ArrayUtilsApache Commons Lang的一部分。