2014-12-02 61 views
0

對不起,如果我有點模糊,但在不是我的母語和我是初學者之間,我正在盡我所能將問題明確。在構造函數中添加一個組而不是隻有一個

即使在Google中搜索後,我仍然陷於練習的一部分,但找不到任何解決方案。至少不是我理解的東西。

我必須創建兩個構造函數,其中一個除變量外,接收一組教師,另一個只接收一位教師。

private Set<Teacher> teacher; 

public DespachoImpl(String nombre, Integer planta, Integer aforo, Teacher teacher) { 
    super(TipoLugar.OTRO, nombre, planta, aforo); 
    this.teacher = new HashSet<Teacher>(); 
} 

我無法找到有關如何使他們不同的東西,這樣一個構造函數只增加了1名教師,而另一個增加了一些老師。感謝您的幫助,如果您也鏈接了一些資源,那將是可愛的。

+0

只寫第二個。 – Maroun 2014-12-02 09:47:37

+0

使用構造函數重載創建兩個構造函數 – 2014-12-02 09:48:32

+0

'列出教師'添加多個教師。 – 2014-12-02 09:50:03

回答

0

至於有人建議,你應該使用構造函數重載。

Java知道使用哪個構造函數,因爲它們的參數不同。因此,您可以製作兩種不同的構造函數,只要參數的類型或數量不同,就可以。

在你的情況下,參數的數量是相同的,但最後一個參數的類型是不同的。對於一個構造函數,類型爲Teacher,另一個爲Set<Teacher>。所以用Java寫這個是合法的。

因此,舉例來說:

private Set<Teacher> teacher; 

// Constructor with only one teacher. 

public DespachoImpl(String nombre, Integer planta, Integer aforo, Teacher teacher) { 
    super(TipoLugar.OTRO, nombre, planta, aforo); 
    this.teacher = new HashSet<Teacher>(); 
    this.teacher.add(teacher); 
} 

// Constructor with a set of teachers. 

public DespachoImpl(String nombre, Integer planta, Integer aforo, Set<Teacher> teachers) { 
    super(TipoLugar.OTRO, nombre, planta, aforo); 
    this.teacher = new HashSet<Teacher>(teachers); 
} 

其實你可以直接給teachersthis.teacher,但我選擇以顯示覆制,那你可能需要使用你的東西參數傳遞設定的假設下否則你不希望私人設置受到它的影響。

所以,現在,如果你撥打:

new DespachoImpl("XXXX", 5, 8, new Teacher(....)); 

它將調用第一個構造函數。但如果你打電話:

Set<Teacher> teachers = new HashSet<>(); 
teachers.add(new Teacher(...)); 
teachers.add(new Teacher(...)); 

new DespachoImpl("XXXX", 5, 8, teachers); 

它會調用第二個構造函數。

+0

但是你將能夠創建一個沒有老師的實例,這是不正確的。 – 2014-12-02 10:12:54

+0

@鄒鄒我沒有看到OP要求這套教師不是空的,只需要一個教師套裝。如果需要檢查空白,可以將其添加到構造函數中,然後拋出異常。 – RealSkeptic 2014-12-02 10:16:37

+0

我認爲這樣做,謝謝你,會更新。 – 2014-12-02 13:33:38

1

如果您至少需要一位教師(其他人可以是可選的),即一對多關係,則不需要兩個構造函數。用varargs參數就足夠了。

public DespachoImpl(String nombre, Integer planta, Integer aforo, Teacher required, Teacher... moreTeachers) { 
    super(TipoLugar.OTRO, nombre, planta, aforo); 
    this.teacher = new HashSet<Teacher>(); 
    this.teacher.add(required); 
    this.teacher.addAll(Arrays.asList(moreTeachers)); 
} 
+0

至於練習,我需要兩個。 – 2014-12-02 09:53:54

+0

是不是'必需的'冗餘? 「老師......老師」應該足夠了。 – 2014-12-02 09:56:16

+0

@OlaviMustanoja不,因爲您可以創建沒有教師的「DespachoImpl」對象。我認爲它至少需要一名教師。 – 2014-12-02 09:56:43

0

你需要嘗試構造函數重載..

public class Teacher 
{ 
    public Teacher(string teacherName) 
    { 
     // Add single teacher 
    } 

    public Teacher(List<string> teacherNames) 
    { 
     // Add multiple teachers 
    } 
} 

希望這有助於

+0

OP不定義'Teacher'類。這是一個給定的。需求是有兩個'DespachoImpl'類的構造函數,從OP的來源判斷。 – RealSkeptic 2014-12-02 10:00:19

+0

@RealSkeptic是正確的。 – 2014-12-02 10:02:39

1

你可以得到教師的任意金額,然後檢查教師的數量至少爲1 :

private Set<Teacher> teachers; 

public DespachoImpl(String nombre, Integer planta, Integer aforo, Teacher... teachers) { 
    super(TipoLugar.OTRO, nombre, planta, aforo); 

    if (teachers.length == 0) { 
     throw new IllegalArgumentException("No teachers given"); 
    } 

    this.teachers = new HashSet<Teacher>(); 
    this.teachers.addAll(Arrays.asList(teachers)); 
} 

如果需要兩個構造函數,那麼這是一種方法:

private Set<Teacher> teachers; 

public DespachoImpl(String nombre, Integer planta, Integer aforo, Teacher teacher) { 
    this(nombre, planta, aforo, new Teacher[] { teacher }); 
} 

public DespachoImpl(String nombre, Integer planta, Integer aforo, Teacher[] teachers) { 
    super(TipoLugar.OTRO, nombre, planta, aforo); 

    if (teachers.length == 0) { 
     throw new IllegalArgumentException("No teachers given"); 
    } 

    this.teachers = new HashSet<Teacher>(); 
    this.teachers.addAll(Arrays.asList(teachers)); 
} 

這對我來說似乎很愚蠢,但第一個構造函數有必要能夠調用第二個構造函數。除此之外,這是第一個同樣堅實的解決方案。

+0

IMO這是更好地添加所需的教師作爲參數。在編譯時你會得到一個錯誤,而不是運行時。 – 2014-12-02 10:05:50

+0

這就是我想的,問題是,我需要兩個構造函數,而不是一個。 – 2014-12-02 10:06:10

+0

@鄒鄒國際海事組織沒有給教師構造函數是程序員錯誤,這正是運行時錯誤的原因。 – 2014-12-02 10:09:03

0

我已經創建了兩個構造函數,其中一個除變量之外,接收一組老師爲List<Teacher> teachers,另一個只接收一個教師對象。

private Set<Teacher> teacher; 

將單個教師對象添加到集合中。

public DespachoImpl(String nombre, Integer planta, Integer aforo,Teacher teacher) { 
     super(TipoLugar.OTRO, nombre, planta, aforo); 
     this.teacher = new HashSet<Teacher>(); 
     this.teacher.add(teacher);  
} 

將教師列表添加到集合中。

public DespachoImpl(String nombre, Integer planta, Integer aforo,List<Teacher> teachers) { 
     super(TipoLugar.OTRO, nombre, planta, aforo); 
     this.teacher = new HashSet<Teacher>(teachers); 
} 

,或者您可以通過多個教師可變參數

public DespachoImpl(String nombre, Integer planta, Integer aforo, Teacher... teachers) { 
     super(TipoLugar.OTRO, nombre, planta, aforo); 
     this.teachers = new HashSet<Teacher>(); 
     this.teachers.addAll(Arrays.asList(teachers)); 
    } 
相關問題