`

始终要覆盖toString

 
阅读更多

java.lang.Object的toString方法的实现:

public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这通常不是用户期望看到的,它包含类名称,一个“@”符号,以及散列码的无符号十六进制表示法。

 

toString通用约定指出,被返回的字符串应该是一个“简洁的,但信息丰富,并且易于阅读的表达形式”,进一步的约定指出,建议所有的子类都覆盖这个方法。

 

提供好的toString实现可以使类用起来更加舒适,当对象被传递给println、printf、字符串联操作符(+)以及assert或者被调试器打印出来时,toString方法会被自动调用。

提供好的toString方法,产生有用的诊断信息会非常容易:System.out.println("Failed to connect: " + phoneNumber);

 

toString方法应该返回对象中包含的所有值得关注的信息,如果对象很大,包含的状态信息难以用字符串表示,应该返回一个摘要信息。

 

在实现toString的时候,必须作出是否指定返回值的格式的决定。指定格式的好处是可以被用作一种标准的、明确的、适合人阅读的对象表示法。不足之处在于类一旦指定格式,必须始终如一地坚持这种格式。程序员将编写代码来解析这种字符串,如果将来改变了格式,他们的代码就无法正常运行了。总的来说不指定格式保留了灵活性。

 

两个建议:

1.无论是否决定指定格式,都应该在文档中明确地表明意图,通过文档注释来说明。

2.无论是否指定格式,都为toString返回值中包含的所有信息,提供一种编程式的访问途径,如使用getter方法提供。否则程序员必须去解析字符串,而这会导致大量不必要的工作量和增加程序出错的可能性。

分享到:
评论

相关推荐

    万能的toString

    1. **覆盖toString()** 当你创建一个自定义类时,如果希望打印出类实例的属性值,需要在类中重写`toString()`。通常,这会涉及到遍历所有实例变量,并将它们的值转换成字符串,然后用逗号分隔。例如: ```java ...

    JavaScript Object toString 初始补充

    这可能是一个详细的代码示例,解释如何使用`radix`来格式化数字字符串,或者展示了在自定义对象中正确覆盖`toString`方法的最佳实践。 总的来说,通过深入理解并熟练运用`toString`方法,开发者可以更好地控制和...

    Tostring的多态

    对于自定义类型,这可能不是很有用,所以通常建议在自定义类型中覆盖`ToString()`。 3. **格式化输出** `ToString()`方法还可以接受一个格式字符串参数,允许你控制输出的格式。例如,`DateTime`类型的`ToString()...

    toStringGen:这是一个想法插件,此插件提供了toString方法,该方法返回json格式的实体的字符串

    generate a toString() with a json format select single or multiple java class file, click toString via rightKey, ... 如果toString()方法已存在,则直接覆盖 by qq963577663 wangjinwen 2018-06-17

    JavaScript中toString()方法的使用详解

    这可以通过在自定义对象中定义一个覆盖默认toString()方法的新方法来实现。 接下来,我们通过一段示例代码来进一步说明toString()方法的使用: ```javascript function Book(title, publisher, price) { this....

    在C#的类或结构中重写ToString方法的用法简介

    在重写`ToString()`方法时,你需要使用`override`关键字来指定你是在覆盖基类的方法,并且返回类型必须是`string`。下面是如何在`Person`类中重写`ToString()`的示例: ```csharp public class Person { public ...

    写一个类Student,包含三个属性学号id,姓名name和年龄age;要求覆盖基类Object中的ToString()方法和Equals()方法,使得直接输出Student对象时输出的是对象的id,name和age信息;并且当两个对象的学号相同时认为它们相等;

    要求覆盖基类Object中的ToString()方法和Equals()方法,使得直接输出Student对象时输出的是对象的id,name和age信息;并且当两个对象的学号相同时认为它们相等; 然后写一个主方法测试以上定义。

    JavaScript函数中关于valueOf和toString的理解

    这两种方法都是利用了JavaScript的动态类型特性和`valueOf`与`toString`的覆盖特性,实现了高阶函数的连续调用,并在需要的时候提供计算结果。 在上面的例子中,`temp.valueOf`和`temp.toString`被赋值为同一个函数...

    Java语言中的 覆盖重载和多态

    例如,`Object`类中的`toString()`和`equals()`方法经常被子类覆盖来提供定制的行为。同时,`equals()`和`==`的区别在于,未覆盖`equals()`时,它们比较的是对象的引用,而覆盖后,通常比较的是对象的内容。 **重载...

    javascript中强制执行toString()具体实现

    为了控制和强制执行`toString()`方法,从而避免这些错误,我们可以覆盖对象原型中的`valueOf`方法。这样,当JavaScript引擎尝试将对象转换为基本类型值以执行运算时,会按照我们定义的逻辑来执行。 默认情况下,`...

    Javascript中valueOf与toString区别浅析

    在JavaScript中,`valueOf`和`toString`是两个非常重要的内置方法,它们分别用于将对象转换为原始值和字符串。...在自定义对象时,如果需要覆盖默认的行为,务必了解并遵循这些调用规则,以确保代码的正确性和一致性。

    js代码-Object.prototype.toString

    在某些情况下,开发者可能会覆盖`toString`方法以提供自定义的字符串表示。 总的来说,`Object.prototype.toString`是JavaScript中一个强大且灵活的方法,它在处理类型检测、对象表示以及自定义输出方面都有广泛的...

    Joshua Bloch 所著《Effective Java 第二版》一书摘要.zip

    Joshua Bloch 所著《Effective Java 第二版》一书摘要这是我对 Joshua Bloch 所著《Effective Java 第 2 版》的总结。我在学习时会用到它,也可以作为快速参考。... 始终覆盖toString11.明智地覆盖克隆12.考虑实

    node-cleanse:递归删除对象上的保留键,如 hasOwnProperty、toString 等

    洁净递归删除对象上的保留键,如 hasOwnProperty、toString 等安装 npm install... 但是,因为toString被覆盖为字符串,所以现在调用toString是错误的,因为它不再可调用。 运行此代码会导致: TypeError: Cannot conve

    ArcGIS-Engine拓扑规则转换为中文-C#代码.doc

    第一个图层线要素应被第二个线图层线要素覆盖.ToString()`。 除了线要素的规则外,还有针对面要素的规则: 1. **面要素之间无空隙 (esriTRTAreaNoGaps)**:此规则确保相邻的面之间无缝隙,即面的边界应当连续。...

    浅谈javaSE 面向对象(Object类toString)

    然而,对于大多数实际用途,这种默认的表示往往不够具体,因此我们常常需要在子类中覆盖`toString()`方法,以提供更有意义的信息,比如对象属性的值。 `hashCode()`方法是另一个重要的`Object`类方法。它返回对象的...

    13.java学习第十三章——方法覆盖和多态.pdf

    ### Java学习第十三章——方法覆盖和多态 #### 一、方法覆盖(重写 —— Override) **1.1 回顾方法重载** 在Java中,**方法重载**(Overloading)指的是在一个类中定义多个同名方法,但这些方法的参数列表必须有所...

    2022年掌握JDK1.5枚举类型Java教程.docx

    3. 覆盖toString和valueOf方法:当需要自定义枚举常量的字符串表示或反向转换时,可以覆盖这两个方法。例如,上面的例子中,覆盖toString方法使得输出不再是简单的名称,而是带有枚举类名的全限定字符串。 4. 构造...

    JAVA继承和多态实验报告PDF

    1.实验目的 (1)掌握类的继承机制。 (2)熟悉类中成员变量和方法的访问控制。 (3)熟悉方法或构造方法多态性。...每个类都要覆盖toString方法。 海伦公式:三角形的面积等于s(s-a) (s-b) (s-c)的开方,其中s=(a+b+c)/2

Global site tag (gtag.js) - Google Analytics