2013-09-25 53 views
0

我得到了我所謂的價值的對象,它看起來像這樣:得到奇怪的輸出,如「@值7d5b6e」,而不是某些特定字符串

class Values{ 
    private String name; 
    private String type; 
    private String value; 

public Values(String name, String type, String value) 
    {this.name = name; this.type = type; this.value = value;} 
public String getName() 
    {return name;} 
public String getType() 
    {return type;} 
public String getValue() 
    {return value;} 
    } 

我的數據模型看起來是這樣的。我的輸入是一個XML文件。一個包包含一些類,每個類都有一個名稱,一個類型和一個值。上面的類值應該代表一個屬性。

我使用Multimaps來保存這些信息。例如,期望的輸出就像這樣。

[PackageName:[ObjectName1, Values1], 
      [ObjectName1, Values2], 
      [ObjectName2, Values1]] 

我的代碼來處理輸入XML文件是這樣的。 For-loops將迭代輸入文件的數據結構。

 SAXBuilder builder = new SAXBuilder(); 
     org.jdom2.Document doc = builder.build(input); 
     Element rootNode = doc.getRootElement(); 
     List<Element> listPackages = rootNode.getChildren(); 


     for(Element packages : listPackages) 
     { 
       List<Element> objectInstanceList = packages.getChildren(); 

       for(Element objects : objectInstanceList) 
       { 
        Map<String, Multimap<String,Values>> valuesMap = new HashMap<String, Multimap<String, Values>>(); 

        List<Element> listObjectClasses = objects.getChildren(); 
        bdbID = objects.getName(); 
        if (objects.getAttributes().size() == 0) 
        { 
        for(Element classes : listObjectClasses) 
         {  
        List<Element> listObjectAttributes = classes.getChildren(); 

         for(Element objectAttributes : listObjectAttributes) 
         { 

          Multimap<String, Values> mm = HashMultimap.create(); 
          String name = objectAttributes.getAttributeValue("name"); 
          String type = objectAttributes.getAttributeValue("type"); 
          String value = objectAttributes.getAttributeValue("value"); 
          Values v = new Values(name, type, value);     
          mm.put(classes.getName(), v); 
             System.out.println(name +":" + type + ":" + value); 
          System.out.println(v); 
         } 
         valuesMap.put(bdbID, mm); 
        } 
        } 
      } 
    } 

2打印結束是爲了測試目的,這裏來了我的問題。調整兩張照片的輸出。

輸出1:

Bandwidth:KiloBitPerSecond:50 //Name:Type:Value 

輸出2:

[email protected] // Dataprocessing = Java-Package which contains the class. 

的問題是,爲什麼會出現這種奇怪的輸出?爲此目的使用像Value這樣的類是錯誤的嗎?如果有人知道一個更好的想法做到這一點,我對任何事情都是開放的。

回答

3

您正在看到ValuesObject#toString表示形式。您需要覆蓋該類中的toString以提供格式化輸出

@Override 
public String toString() { 
    return "Values [name=" + name + ", type=" + type + ", value=" + value + "]"; 
} 
1

您必須在您的Values課程中使用toString()方法。

作爲每的toString的文檔()

返回該對象的字符串表示。通常,toString方法返回一個「文本表示」該對象的字符串。

所以

[email protected]是價值類的文字表述。

你只是ovveride toString方法在Values類。

class Values { 
    private String name; 
    private String type; 
    private String value; 

    public Values(String name, String type, String value) { 
     this.name = name; 
     this.type = type; 
     this.value = value; 
    } 

    public String getName() { 
     return name; 
    } 

    public String getType() { 
     return type; 
    } 

    public String getValue() { 
     return value; 
    } 

    @Override 
      public String toString() { 
       StringBuilder result = new StringBuilder(); 
       result.append(this.name).append(","); 
       result.append(this.type).append(","); 
       result.append(this.value) 
       return result.toString(); 
      } 
} 
+0

感謝,偉大的作品,沒有想過這件事。 Reimus更快,所以我接受了他的回答,但你的回答也一樣好。 – Alika87

+0

沒有問題,它有幫助。很高興:) –