2012-04-14 51 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? 
    ...... 
    } 
} 

基本上,一個構造函數需要一個double值,而另一個構造函數需要一個雙數數組。有沒有什麼方法可以只實例化Queue一次?

回答

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

謝謝!這是我一直在尋找的風格。不敢相信我沒有想到這個... – jkface 2012-04-14 01:23:12

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 }); 

注:ArrayUtilsApache Commons Lang的一部分。