2012-04-14 14 views
0

Wenn mir jemand sagen könnte, ob mein Code redundant ist (und wenn ja, mögliche Lösungen zur Beseitigung von Redundanz) würde ich es sehr zu schätzen wissen.Beseitigung der Redundanz in mehreren Konstruktoren

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

Grundsätzlich nimmt ein Konstruktor einen doppelten Wert an, während der andere Konstruktor ein Array aus doppelten Zahlen aufnimmt. Gibt es eine Möglichkeit, die Queue nur einmal zu instanziieren?

Antwort

3

Bei der Verwendung von Java 7 und NetBeans oder anderen IDEs kann die IDE-Flag

a = new LinkedList<Double>(); 

als überflüssig, können Sie

a = new LinkedList<>(); 

stattdessen verwenden. Aber wenn Sie nur über tatsächliche Redundanz im Code zu fragen, verwenden:

public class Question { 
    private Queue<Double> a; 

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

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

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

Danke! Das ist der Stil, nach dem ich gesucht habe. Kann nicht glauben, dass ich nicht daran gedacht habe ... – jkface

1

Legen Sie es in der Felddeklaration:

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

Sie können über den this Operator anderen Konstruktor mit den entsprechenden Argumenten nennen .

3

Sie können Ihre Variable während der Deklaration instanziieren.

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

    ... 
} 
1

Sie können auch wollen, dies zu berücksichtigen:

public class Question { 
    private Queue<Double> a; 

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

Dies verwendet die varargs Konstruktor, an die Sie eine einzige Doppel-, Mehrfach- Doppelzimmer, oder ein Array von Doppel passieren. So können Sie tun:

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

Hinweis:ArrayUtils Teil des Apache Commons Lang ist.