2012-03-24 33 views
0

所以我要發佈的這兩個文件都在我的DataBase包中。 DBBinding類只需創建一個對象,其中包含一個字符串和一個值。然後,DBrecord將保留一組DBBindings,它們都具有相同的密鑰字符串,但具有不同的值字符串。出於某種原因,我無法想象/找到在DBrecord中添加方法的正確方法,以便它調用DBBinding類/對象構造函數。無法從同一個包中的不同類中構造函數被識別。

這是應該添加綁定的方法:

private void addRecord(String key_, String value_) 
{ 
    //DBBinding myDBBinding=new DBBinding(key_, value_);//constructor not defined error 
    //DBBinding myDBBinding(key_,value_); 
    //DataBase.DBBinding myDBBinding=new DataBase.DBBinding(key_, value_);//constructor not defined error 

} 

這裏的DBBINDING碼,然後按DBrecord代碼。

package DataBase; 

public class DBBinding { 

    private String key; 
    private String value; 

    public void DBBinding(String key_, String value_) 
    { 
     String key =new String(key_); 
     String value=new String(value_); 
    } 

    //public String toString() 
    //{return key+": "+value;} 

} 

package DataBase; 
//package DataBase.*; 
import DataBase.*;//did not help ... ? 

public class DBrecord { 

    boolean select; 
    String key; 
    //need some type of collection to keep bindings. 

    public void DBrecord() 
    { 
     DBrecord myRecord=new DBrecord(); 
     select=false; 
    } 

    private void addRecord(String key_, String value_) 
    { 
     //DBBinding myDBBinding=new DBBinding(key_, value_);//constructor not defined error 
     //DBBinding myDBBinding(key_,value_); 
     //DataBase.DBBinding myDBBinding=new DataBase.DBBinding(key_, value_);//constructor not defined error 

    } 

    public String toString() 
    { 
     //out put key first then all values in collection/group/record. use correct formatting. 
    } 



} 
+1

我意識到這只是家庭作業,但最好的做法是通過構造函數參數或使用setter方法爲DBRecord類提供DBBinding實例。與接口一起使用,可以減少類之間的耦合,使它們更易於測試和維護。如果你需要在你的方法中創建短暫對象的能力,你通常會提供一個可以通過相同機制使用的工廠類。 – tvanfosson 2012-03-24 17:58:55

+0

Tvanfosson。不太清楚「通過構造函數將DBBinding實例提供給DBRecord類」的意思,能否詳細說明這一點和/或指向一些討論此問題的資源。 – 2012-03-24 18:14:51

+0

這個概念被稱爲依賴注入,http://en.wikipedia.org/wiki/Dependency_injection – tvanfosson 2012-03-24 18:18:16

回答

4

在類DBBinding你必須有public DBBinding(String key_, String value_),該void使得 「構造」 居然要:-)

你有同樣的錯誤DBrecord的方法。

順便說,不這樣做:

String key =new String(key_); 

字符串是不可改變的,沒有什麼可以發生,如果你「分享」他們。但是你的代碼強制Java爲一個完全相同的值創建一個新對象。所以只使用

String key = key_; 

然而,在你的情況下,即使這是錯誤的,因爲你創建一個新的局部變量key「陰影」之類的變量key。請看here獲取解釋。

所以產品總數DBBinding應該是這樣的:

package DataBase; 

public class DBBinding { 

    private String key; 
    private String value; 

    public DBBinding(String key_, String value_) 
    { 
     key = key_; 
     value = value_; 
    } 
    ... 
} 
2

如果你希望你的代碼工作,請從您的構造函數中刪除void結構。

簽名差異 構造函數和方法在簽名的三個方面有所不同:修飾符,返回類型和名稱。與方法一樣,構造函數可以具有任何訪問修飾符:public,protected,private或none(通常稱爲包或友好)。與方法不同,構造函數只能使用訪問修飾符。因此,構造函數不能是抽象的,最終的,本地的,靜態的或同步的。

返回類型也非常不同。方法可以有任何有效的 返回類型或無返回類型,在這種情況下返回類型被賦予 作爲void。構造函數沒有返回類型,甚至無效。

+0

我同意你的答案的主旨,但從技術上說這是錯誤的。 aaron burns在構造函數中沒有任何空缺,因爲沒有明確定義的構造函數。有一些看起來像構造函數的命名不佳的方法。 – emory 2012-03-24 18:10:32

+0

Bogdan是正確的,我對我的構造函數有空洞。埃默裏可能認爲我的施工人員寫得不好。你會對構造函數emory做什麼不同的處理。 – 2012-03-24 18:13:12

相關問題