2012-04-14 3 views
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 только один раз?

ответ

3

При использовании Java 7 и NetBeans или других Иды, среда может флаг

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(); 
    ...... 
    } 
} 
+0

Спасибо! Это стиль, который я искал. Не могу поверить, что я не думал об этом ... – jkface

1

Положите его в объявлении поля:

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

Вы можете использовать оператор this вызвать другой конструктор с соответствующими аргументами ,

3

Вы можете создать экземпляр переменной во время объявления.

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

    ... 
} 
1

Вы также можете рассмотреть это:

public class Question { 
    private Queue<Double> a; 

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

Это использует конструктор списков параметров, к которому вы можете передать одну двойную, несколько двойников, или массив удваивается. Так что вы можете сделать:

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

Примечание:ArrayUtils является частью Apache Commons Lang.