2015-10-18 133 views
0

首先請理解,我可能有這個完全錯誤,這就是爲什麼谷歌沒有幫助。 我試圖構建下列對象:M3Tools要求自己構建自己的類

public class M3UTrack { 

    private String path; 
    private int secondsDuration; 
    private String label; 

    //Get and set of these omitted 

    public M3UTrack() 
    { 
     path = null; 
     label = null; 
     secondsDuration = 0; 
    } 
    public M3UTrack(M3UTrack t) 
    { 
     // Creating a track as a duplicate of the track you pass it? 
     path = new String(t.getPath()); 
     label = new String(t.getLabel()); 
     secondsDuration = t.getSecondsDuration();  
    } 

從我收集什麼,如果我是使用第二個構造我會通過自身的一個對象???它把我扔在一個循環中。還有其他類涉及。

+0

你想構建一個M3Tools對象或一個M3UTrack對象?我無法看到提到的M3Tools的任何代碼。 –

+0

你的問題是什麼? – Atuos

+0

您需要展示如何調用第二個構造函數,以便我們能夠理解「它是如何在循環中拋出(你)」的。 –

回答

1

M3UTrack(M3UTrack t)是一個所謂的複製構造函數,因爲它創建一個新的實例,但複製另一個的值。如果你想創建第一個/新的實例,你可能會使用第一個版本。類和構造函數是公開的,所以也不應該寫

M3UTrack t = new M3UTrack(); // default constructor 
t.setPath(...); t.setLabel(...); t.setDurationSeconds(10); // fill data 
M3UTrack s = new M3UTrack(t); // sample usage of copy constructor 

阻止你,如果你有這個需要您給我們展現你的代碼,你的錯誤消息的問題。這是編譯時或運行時錯誤?如果是堆棧跟蹤,請告訴我們涉及哪些行號。

順便說一句:你可能想添加另一個構造函數來指定所有必填字段,所以你不需要使用setters。這有一個好處,就是你永遠不會有一個「半」構造的對象。當你省略了制定者,那麼你使用的是所謂的不可變對象模式:

public M3UTrack(String path, String label, int duration) 
{ 
    this.path = path; 
    this.label = label; 
    this.secondsDuration = duration; 
} 

,然後構造它想:

M3UTrack t = new M3UTrack("file.mp3", "Songs", 10/*sec*/); 
+1

謝謝你這可能是有道理的,這是uni工作的一部分。所以答:我不想發佈整個代碼由於IP問題。 B.我顯然沒有寫這一點。 下面是從一個稱爲播放列表 類,其保持的 '私人列表 theListOfTracks列表培訓相關部件;' 後來添加方法被稱爲 '空隙加載(M3UTrack米){theListOfTracks.add(M) ;}' 關於錯誤消息,以及我沒有編譯它,因爲我需要首先解決如何初始化這個類。 –

+0

我的意思是實例化,而不是初始化 –

0

您可以完美地引用您定義的類的對象。如果沒有,你怎麼能create copy constructors?順便說一下,這正是你在public M3UTrack(M3UTrack t)所做的。

維基百科:

拷貝構造函數定義編譯器時 複製類對象執行的操作。 有一個正式的參數 認爲是類的A型拷貝構造函數(參數可以是一個 對象的引用)...

0

從什麼樣子,你會構建一個實例的M3Track並設置它的屬性。如果您想製作副本,您可以使用選件的給定副本構造函數。

0

此構建體具有名稱「拷貝構造函數」和specyfic的地方使用。首先正常使用,沒有參數construcror。拷貝構造函數

用法,像名字一樣,是「之間」兩個對象(新老),似乎永遠不會發生你的使用情況(對不起,拼寫,這從手機) M3UTrack theNew = new M3UTrack(theOld)