0

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

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?
     ......
  }
}

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

4

5 回答 5

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();
     ......
  }
}
于 2012-04-14T01:21:34.277 回答
3

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

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

   ...
 }
于 2012-04-14T01:22:15.193 回答
2

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

于 2012-04-14T01:22:04.043 回答
1

把它放在字段声明中:

private Queue<Double> a = new LinkedList<Double>();
于 2012-04-14T01:21:42.620 回答
1

您可能还需要考虑这一点:

public class Question {
    private Queue<Double> a;

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

这使用 varargs 构造函数,您可以将单个双精度、多个双精度或双精度数组传递给该构造函数。所以你可以这样做:

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

注意: ArrayUtilsApache Commons Lang的一部分。

于 2012-04-14T01:29:35.657 回答