我看到了一种将数据从数据库解析为实体的方法。我得到了这个好的包装类
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
这样的名字而不是它们的名字。另一个好人告诉我,我必须覆盖toString()
类中的ObjectWrapper
方法才能获得真实的结果。
我该怎么做?我知道那些原始类型无法添加或更改。例如,我应该在下面做这样的事情吗?
public static String toString(){
String str = new String();
return str += wrappedObject;
}
答案 0 :(得分:4)
首先,适用于您的类的特定实例的方法不应该是static
,并且通常应该避免使用字符串连接来支持StringBuilder
。
其次,许多工具将为您创建有用的toString
方法:您的IDE可以生成一个,而Apache Commons Lang有ToStringBuilder
。
如果您没有关于包装类型(及其自己的toString
实现)的任何信息,那么您可能只使用以下内容:
@Override
public String toString() {
// uses a StringBuilder implicitly
return "ObjectWrapper[" + wrappedObject.toString() + "]";
}
答案 1 :(得分:1)
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() ".";
}