簡體   English   中英

如何在包裝器類中重寫toString()?

[英]How to override toString() inside wrapper class?

有人向我展示了一種將某些數據從數據庫解析到實體的方法。 我得到了這個很好的包裝課

public class ObjectWrapper implements Wrapper{
   private Object wrappedObject;
//...
public static Wrapper wrap(ResultSet rs, int column, int columnType) throws SQLException {        
        if (columnType == 0) {
            return new EmptyListExceptionWrapper();
        } else {
            return new ObjectWrapper(rs.getObject(column));
        }
    }
}

當我嘗試使用它來解析那些對象時,我得到的名稱類似於databaseConnection.ObjectWrapper@5010be6而不是它們的真實名稱。 另一個好朋友告訴我,我必須重寫ObjectWrapper類中的toString()方法才能獲得真實的結果。

我應該怎么做? 我知道這些原始類型無法添加或更改。 例如,我應該在下面做類似的事情嗎?

 public static String toString(){
     String str = new String();
     return str += wrappedObject;
 }

首先,應用於類的特定實例的方法不應是static ,並且通常應避免使用StringBuilder來支持StringBuilder

其次,許多工具將為您創建有用的toString方法:您的IDE可以生成一個,而Apache Commons Lang具有ToStringBuilder

如果您沒有有關包裝類型(及其自身的toString實現)的任何信息,那么您可能只使用以下內容:

@Override
public String toString() {
    // uses a StringBuilder implicitly
    return "ObjectWrapper[" + wrappedObject.toString() + "]";
}

Object.toString()這是您正在調用的

str += wrappedObject;

默認情況下將返回對象的哈希碼。 您需要將wrappedObject轉換為可以打印以下內容的屬性

class objectDef{
    private int x;
    public int y;
    public int getX() { return x; }
}

//ToString method
public String toString()
{
    return "ObjectWrapper has Y: " + ((objectDef)wrappedObject).y) + " x: " + ((objectDef)wrappedObject).getX() ".";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM