如何在包装类中覆盖toString()?

问题描述 投票:1回答:2

我看到了一种将数据库中的数据解析为实体的方法。我得到了这个好的包装类

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;
 }
java override wrapper tostring
2个回答
4
投票

首先,适用于类的特定实例的方法不应该是static,并且通常应该避免使用字符串连接来支持StringBuilder

其次,许多工具将为您创建有用的toString方法:您的IDE可以生成一个,而Apache Commons Lang有ToStringBuilder

如果您没有关于包装类型(及其自己的toString实现)的任何信息,那么您可能只使用以下内容:

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

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() ".";
}
© www.soinside.com 2019 - 2024. All rights reserved.