toString实现的最佳标准样式是什么?[关闭]

2020/12/30 21:21 · php ·  · 0评论

我们有很多对象,我们希望为其实现简单toString的输出对象属性的对象。其中一些属性可能是复杂的对象本身。

是否有任何标准,或者仅仅是样式的最佳实践?我在想类似的东西:

[SimpleClassName] { prop1:value, prop2:value }

在这种情况下,嵌套值将如下所示:

[SimpleClassName] { prop1:value, prop2:[NestedObject] { prop3:value}}

我们正在使用Java,但是我发现自己在大多数语言中都在问同样的问题!

就我个人而言,我发现混合使用它[]{}不太容易立即获得层次结构的视图。

我喜欢这种格式(并且已经在很多地方使用过它):

SimpleClassName[prop1=value, prop2=value]
SimpleClassName[prop1=value, prop2=NestedObject[prop3=value]]

还有与添加的标识符的可能性@,例如默认样式公共琅 ToStringBuilder也认为(使用它自己的例子):

Person@182f0db[name=John Doe,age=33,smoker=false]

我认为GuavaMoreObjects.toStringHelper()产生的格式非常好,但是使用一些一致的格式主要是很好的:

public String toString() {
  return Objects.toStringHelper(this)
      .add("prop1", prop1)
      .add("prop2", prop2)
      .toString();
}

// Produces "SimpleClassName{prop1=foo, prop2=bar}"

json语法似乎非常合适,因为它是专门为将复杂对象表示为字符串而设计的

Person = {
    "firstName": "John",
    "lastName": "Smith",
    "age": 25,
    "address": 
    {
        "streetAddress": "21 2nd Street",
        "city": "New York",
        "state": "NY",
        "postalCode": "10021"
    },
    "phoneNumber": 
    [
        {
            "type": "home",
            "number": "212 555-1234"
        },
        {
            "type": "fax",
            "number": "646 555-4567"
        }
    ]
}

这不是问题的直接答案,但是下面的内容在最初的开发过程中可以节省时间:

免责声明:使用Apache Commons库。

  1. 添加一个新的名为Eclipse的模板xreflectJava > Editor > Templates; 在下面的模式文本区域中添加以下内容
// ---------- template start ----------- //
${:import(org.apache.commons.lang.builder.EqualsBuilder,org.apache.commons.lang.builder.HashCodeBuilder,org.apache.commons.lang.builder.ReflectionToStringBuilder)}
/*
 * (non-Javadoc)
* @see java.lang.Object#equals(java.lang.Object)
 */
@Override
public boolean equals(
        final Object pObj) {
    return EqualsBuilder.reflectionEquals(this, pObj);
}

/*
 * (non-Javadoc)
 * @see java.lang.Object#toString()
 */
@Override
public String toString() {
    return ReflectionToStringBuilder.toString(this);
}

/*
 * (non-Javadoc)
 * @see java.lang.Object#hashCode()
 */
@Override
public int hashCode() {
    return HashCodeBuilder.reflectionHashCode(this);
}
// ---------- template end ----------- //
  1. OKOK
  2. 只需转到Java类的末尾,键入xreflect并按Ctrl+,Space即可自动自动填充equals(),toString()和hashCode()方法。

是否有任何标准,或者仅仅是样式的最佳实践?

否。方法的“最佳”输出toString()取决于您要使用的方法。是否以允许反序列化的形式序列化对象状态?是否用于创建调试消息?是否用于渲染对象以显示给最终用户?

如果您想为调试/记录toString()方法开发内部风格,那很好。但是除非有此要求,否则我不会打扰。海事组织,最好将这些努力花在其他地方。

如果您的对象具有某些可能有用的标识符,那么我将实现类似于您的第二个示例的方法:

[SimpleClassName:id] { prop1:value, prop2:[NestedObject:id] { prop3:value }}

在哪里,id使该对象成为标识符很有意义-规范Person对象的名称,数据库中对象的主键等。

既然您询问了其他开源项目,那么下面是jEdit的工作方式,这与Wouter的类似:

BufferChanging[what=BUFFER_CHANGING,source=org.gjt.sp.jedit.EditPane[active,global]]

签出phps print_r($ obj,true)或serialize()都可以工作,不知道确切需要什么。jsons也是一个干净的解决方案,特别是如果您想在javascript环境中导入数据

本文地址:http://php.askforanswer.com/tostringshixiandezuijiabiaozhunyangshishishenmeguanbi.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!