`

始终要覆盖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方法提供。否则程序员必须去解析字符串,而这会导致大量不必要的工作量和增加程序出错的可能性。

分享到:
评论

相关推荐

    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

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

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

    xcode-maven-plugin-1.4.1.zip

    labeled-tostring.zip,覆盖tostring以显示参数标签的scala特征覆盖tostring以显示参数标签的scala特征

    Java语言程序设计

    设计一个类Shape(图形)包含求面积和周长的area()方法和perimeter()方法以及设置颜色的方法SetColor(),并利用...每个类都要覆盖toString方法。 海伦公式:三角形的面积等于s(s-a)(s-b)(s-c)的开方,其中s=(a+b+c)/2

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

    ArcGIS-Engine拓扑规则转换为中文-C#代码 case "esriTRTLineNoOverlap": topoRuleType = TopoErroType.线要素间不能有相互重叠部分.ToString();...第一个图层线要素应被第二个线图层线要素覆盖.ToString();

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

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

    枚举(switch、覆盖枚举、实现接口等)

    下面给出一个toString()方法覆盖的例子。 public enum Color { RED("红色" , 1 ), GREEN( "绿色" , 2 ), BLANK( "白色" , 3 ), YELLO( "黄色" , 4 ); // 成员变量 private String name; private int index...

    wpf地震体浏览工具(源码)

    segybinaryheader.AddInfo("27-28", (segyBinaryHeader.fold).ToString(), "CMP覆盖次数"); segybinaryheader.AddInfo("29-30", (segyBinaryHeader.tsort).ToString(), "道分选码"); segybinaryheader.AddInfo(...

    程序员考试刷题-demo:演示

    程序员考试刷题演示 ...toString() 方法,该方法打印存储在这些类中的文本。 SpecialString 类不会覆盖 toString() 方法,因此当 SpecialString 的实例打印到控制台时,您会得到:@。 问题二:不正确 编译执行T

    Data-Class-Java:带有反射的数据类

    覆盖toString()方法,然后编写它; @Overridepublic String toString(){ return Stringify . toString( this );} 然后按照以下步骤创建Java bean; 书Book book = new Book ( " Kurk Mantolu Madonna " , 2015 );...

    KittehMavenPlugin

    此功能检查类是否覆盖toString或使用Object的默认值。 ###示例用法 以下示例将失败,直到所有类(或其父类)都具有自定义toString为止: < groupId> org . kitteh < / groupId > < artifactId> kitteh - ...

    设计一个包含5个类的Java程序.zip

    覆盖每个类中的toString()方法,输出相应的类名、编号ID和姓名。 编写一个测试程序,随机创建8个Student、Faculty或Staff对象,放在一个数组或者Vector类对象中,依次调用他们的toString()方法显示信息。

    Java基础[03-面向对象].

    面向对象是相对面向过程而言 面向对象和面向过程都是一种思想 面向过程 强调的是功能行为 面向对象 将功能封装进对象,强调具备了功能的对象。 面向对象是基于面向过程的。

    Person、Student、Employee、Faculty和Staff等含类的继承应用

    (Person、Student、...覆盖每个类中的toString方法显示相应的类名和人名。 画出类的UML图,并实现这些类。编写测试程序,创建Person、Student、Employee、Faculty和Staff类,并调用它们的toString()方法。

    java计算器程序.doc

    String str56=Integer.toString(str22.length());//将整形转换成字符串 Lb10.setText(str22); Lb2.setText(str56); Lb3.setText(str56); Lb4.setText(str56); Lb5.setText("无"); Lb12.setText(".0"); Lb1....

    overlayer:电子应用程序,用于在屏幕上显示任意覆盖图

    node -p " crypto.randomBytes(20).toString('hex') " 然后,创建一个配置文件,并将其放在$HOME/.overlayerrc.json : { " key " : " 7d382308f2a4b8c2a1165bc801bd49ebc3751b3c " } 当您运行该应用程序时,它...

    java第二次作业_hfut_hfutjava2_

    hfut java第二次作业设计一个包含5个类的Java程序,名为Person的父类有两个子类,学生类Student和员工类Employee。Employee类有两个子类,教师类Faculty和 职员类...覆盖每个类中的toString()方法,输出相应的类名、

    图片上传并按比例缩小

    如果选中"覆盖原图"checkbox,则覆盖原图。 9。可以根据要求,在webform上设置1个以上的file input和相应的checkbox 10。并在文件上传完毕后,显示原图的文件名,尺寸,字节,和 11。缩略图的文件名尺寸。 12。...

    基于Java实现学生选课模拟系统之文件输入输出【100011979】

    打印课程对象信息,采用覆盖定义 toString()方法的方式。 实验步骤 在保持实验三项目中,Course 类,Student 类,Teacher 类,People 类中的代码不变的情况下,在 main 类中即主函数中对代码进行修改。 2.首先先创建一...

    实验13Java类

    (Person、Student、Employee、Faculty和Staff类)设计名为Person的类和它的两个子类student和Employee。Employee有子类Faculty和Staff。人有姓名、地址、电话号码和...覆盖每个类中的toString方法显示相应的类名和人名。

Global site tag (gtag.js) - Google Analytics