2012-09-03 21 views
0

我班的樣子:名單<Serializable接口>串

的follwong代碼來下MethodCall類:

public static class InnerValue { 
    @XmlElementRef(name = "string", type = JAXBElement.class) 
    @XmlMixed 
    protected List<Serializable> content; 

    public List<Serializable> getContent() { 
    if (content == null) { 
     content = new ArrayList<Serializable>(); 
    } 
    return this.content; 
    } 
} 

當我嘗試致電Innervalue的getContent方法返回的對象,當我嘗試將對象轉換爲字符串我失敗了。

我用下面的代碼將它從Object轉換爲String,但它仍然顯示Object。

System.out.println(MethodCall.getContent.toSting()) 
+1

這是複製錯字? '.getContent.toSting())' – Nim

+0

你期望什麼結果? – 2012-09-03 10:07:36

+4

您必須確保列表中的所有對象都具有合理的'toString'方法。否則,您將看到默認的「MyClass @ def0912」樣式輸出。 –

回答

0

嘗試

System.out.println(MethodCall.getContent()+""); 
+0

我相信它的工作,我也確定投票將是-30:D –

1

呼叫System.out.println(MethodCall.getContent().toSting());甚至不會編譯。如果編譯的話,你的MethodCall類中有一個靜態的getContent()方法,那就是被調用的方法。

的方法getContent()方法在你的問題也不是一成不變的,所以你需要它的類的實例調用它,就像這樣:

InnerValue innerValue = new InnerValue(); 
System.out.println(innerValue.getContent()); 

執行此操作時,不要忘了進口:

import <yourpackagename>.MethodCall.InnerValue; 

創建InnerValue比如像這並沒有太大的意義,但是,由於內容列表中不可避免地會產生空...



至於如何打印列表的內容,考慮這個例子:

class SerializableImpl implements Serializable { 
     private static final long serialVersionUID = 1L; 
    }; 

    List<Serializable> list = new ArrayList<Serializable>(); 
    list.add(new SerializableImpl()); 

    System.out.println(list); 

使用此代碼,我會輸出:

[test.MyTestClass[email protected]] 

這是因爲ArrayList實現在列表中的每個條目上調用toString()。但是由於我們沒有爲類SerializableImpl定義toString(),因此調用了Object類中的默認toString()方法。我們如何解決這個問題?考慮以上代碼的替代方案:

class SerializableInteger implements Serializable { 
     private static final long serialVersionUID = 1L; 
     private int value; 

     public SerializableInteger(int value){ 
      this.value = value; 
     } 

     public String toString(){ 
      return "value = " + value; 
     } 
    }; 

    List<Serializable> list = new ArrayList<Serializable>(); 
    list.add(new SerializableInteger(42)); 

    System.out.println(list); 

現在會發生什麼?嗯...因爲我們爲SerializableInteger類中定義的toString()方法,該方法將被調用,並且我們會在收到輸出:

[value = 42] 

因此,簡言之:當你調用toString()上一個List,該列表中的條目的toString()方法將被調用。因此,如果您想要可讀輸出,請確保您添加到列表中的所有對象都已定義toString()方法。

相關問題