繁体   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