[英]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.