`
javawebsoa
  • 浏览: 410000 次
社区版块
存档分类
最新评论

Java学习笔记:(10)始终要覆盖toString

 
阅读更多
与equals和hashCode不同的是,该条目推荐应该始终覆盖该方法,以便在输出时可以得到更明确、更有意义的文字信息和表达格式。这样在我们输出调试信息和日志信息时,能够更快速的定位出现的异常或错误。如上一个条目中PhoneNumber的例子,如果不覆盖该方法,就会输出PhoneNumber@163b91 这样的不可读信息,因此也不会给我们诊断问题带来更多的帮助。以下代码重载了该方法,那么在我们调用toString或者println时,将会得到"(408)867-5309"。
     @Override String toString() {
         return String.format("(%03d) %03d-%04d",areaCode,prefix,lineNumber);
     }
对于toString返回字符串中包含的域字段,如本例中的areaCode、prefix和lineNumber,应该在该类(PhoneNumber)的声明中提供这些字段的getter方法,以避免toString的使用者为了获取其中的信息而不得不手工解析该字符串。这样不仅带来不必要的效率损失,而且在今后修改toString的格式时,也会给使用者的代码带来负面影响。提到toString返回字符串的格式,有两个建议,其一是尽量不要固定格式,这样会给今后添加新的字段信息带来一定的束缚,因为必须要考虑到格式的兼容性问题,再者就是推荐可以利用toString返回的字符串作为该类的构造函数参数来实例化该类的对象,如BigDecimal和BigInteger等装箱类。
这里还有一点建议是和hashCode、equals相关的,如果类的实现者已经覆盖了toString的方法,那么完全可以利用toString返回的字符串来生成hashCode,以及作为equals比较对象相等性的基础。这样的好处是可以充分的保证toString、hashCode和equals的一致性,也降低了在对类进行修订时造成的一些潜在问题。尽管这不是刚性要求的,却也不失为一个好的实现方式。该建议并不是源于该条目,而是去年在看effective C#中了解到的。
分享到:
评论

相关推荐

    最好的java对象ToString处理方案,ToString基类

    每个项目我都必用的工具类,使用非常简单,放到项目目录中,java对象继承这个ToString类就可以,用在代码日志里特别方便,还支持过滤特定字段,满足日志保密性要求

    java常用包。Date类,tostring方法视频

    java内常用包,date类,toString的使用方法

    观看韩顺平学习整理java的笔记到异常

    帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 main()方法 4 代码块 4 代码块使用注意事项和细节 5 单例模式 6 final...

    java 基础的课堂笔记整理

    6.3 toString方法: 17 6.4 API: 18 6.5什么时候使用import。 19 6.6作业: 19 6.6.1三个整数的排序Sort 19 6.6.2写Point累,计算两个实例之间的的距离 20 6.6.3 50-100随机数 22 6.6.4随机产生一个1800-2200年的...

    java 类与对象基础

    import java.math.*; class BigIntegerExample { public static void main(String args[]) { BigInteger n1=new BigInteger("987654321987654321987654321"), n2=new BigInteger("123456789123456789123456789...

    ToString:从公共属性生成ToString方法

    ToString.Fody 从用[ToString]属性修饰的类的公共属性生成ToString方法。 这是的加载项 期望所有使用开发人员要么,要么拥有。 更多信息,。 用法 另请参阅。 NuGet安装 安装并更新: PM > Install-Package Fody ...

    java简便方法引入getter/setter/tostring等方法

    java 的eclipse或idea等 定义变量时 直接引入lombok.jar包 在类外部 引入@AllArgsConstructor @NoArgsConstructor @Data 简便方法引入getter/setter/tostring等方法

    java-study:基本的Java理解

    基本的JAVA理解学习笔记 细绳 String st = " " ; String st = new String ( " " ); # use ' new ' to make an object st1.equals(st2) :比较字符串st1,st2是否相同 st1.indexOf(st2) :提取特定部分的起始索引...

    Java学习笔记-个人整理的

    {10}反射}{141}{chapter.10} {10.1}Class}{141}{section.10.1} {10.1.1}Field}{145}{subsection.10.1.1} {10.1.2}Method}{145}{subsection.10.1.2} {10.1.3}Constructor}{145}{subsection.10.1.3} {10.2}其他...

    JavaChallenges:独立的Java程序

    A1P1.java 苍鹭公式-a1p2 / A1P2.java 在给定用户输入点的情况下,使用Heron公式计算三角形的面积包括:Point.java和Triangle.java(包含苍鹭公式) 作业2 作业3 测试继承-A3P1.java 继承和覆盖超类toString函数包括...

    JUnit-Lab:为提供的Gradebook.java实现以下(其他)方法:getScoreSize(),toString(),minimum()。 创建一个新的Junit测试类GradebookTester.java

    JUnit实验室 为提供的Gradebook.java实现以下(其他)方法:getScoreSize(),toString(),minimum()。 创建一个新的Junit测试类GradebookTester.java

    java toString ToStringBuilder ReflectionToStringBuilder

    收集整理了一些toString的实现方式,相信其中一定有你喜欢的,还等什么赶紧下载吧,评论后积分返回

    bean运行时跟综实例-TOSTRING

    重写JAVA 程序 tostring()函数,以满足运行时跟综、排错,用log4j的trace级别输出,正常系统运行时不影响性能。 方便生产环境有问题时不停机排查。 主要用于VO或PO。

    为 java文件 书写 ToString方法

    1.自动为指定包下面的所有JAVA 文件书写toString方法代码。 2.自动为指定Class模板类书写toString方法代码。 3.使用该类前最好做备份,编码格式一定要提前设置。

    java源码包2

    内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...

    java源码包---java 源码 大量 实例

    内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...

    toString完美解释

    收藏之toString完美解释

    JAVA上百实例源码以及开源项目源代码

    内容索引:JAVA源码,综合应用,J2me游戏,PNG,图形处理  这是个J2ME控制台程序,它能剔除PNG文件中的非关键数据段,减少文件大小从而达到压缩图片的目的。而图片的质量并不会受到损失。使用时候只需在控制台窗口执行...

    object中toString方法简介_动力节点Java学院整理.doc

    Object类在Java里面是一个比较特殊的类,JAVA只支持单继承,子类只能从一个父类来继承,如果父类又是从另外一个父类继承过来,那他也只能有一个父类,父类再有父类,那也只能有一个,JAVA为了组织这个类组织得比较...

    word源码java-transformer:SpringBoot项目(权限模块)

    word源码java ##代码自动生成 对test包内的代码生成器CodeGenerator进行配置,根据表名来生成代码 修改CodeGenerator.java中的如下常量: JDBC_URL JDBC_USERNAME JDBC_PASSWORD JDBC_DIVER_CLASS_NAME PROJECT_PATH...

Global site tag (gtag.js) - Google Analytics