有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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一次


共 (5) 个答案

  1. # 1 楼答案

    当使用Java7和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();
         ......
      }
    }
    
  2. # 2 楼答案

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

  3. # 3 楼答案

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

    public class Question {
       private Queue<Double> a = new LinkedList<Double>();
    
       ...
     }
    
  4. # 4 楼答案

    将其放在字段声明中:

    private Queue<Double> a = new LinkedList<Double>();
    
  5. # 5 楼答案

    <>你也可以考虑这个:

    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的一部分