更好的重写toString方法

news/2024/7/7 7:35:01 标签: python, java

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

toString方法的规定

建议你始终要重写toString方法

虽然java.lang.Object提供了toString方法的一个实现,但它返回的字符串通常不是我们所希望看到的:

java">// test.ch02.PhoneNumber@12960c
System.out.println(new PhoneNumber(707, 867, 5309));

它会输出类的名称,以及一个@符号,借着是散列码的无符号十六进制表示法。

toString方法的通用约定是:被toString方法返回的字符串,应该是一个简洁的,但信息丰富,并且易于阅读的表达形式。

如何重写toString方法

在重写toString时,需要做出一个重要的决定:是否在toString中,制定返回值的格式。就拿上面的PhoneNumber来说,是否要返回一个707-867-5309的固定电话号码格式。

使用格式的好处是,toString方法会返回标准的、明确的、适合人阅读的对象表示法,例如:

java">@Override
public String toString() {
    return String.format("(%03d) %03d-%04d", areaCode, prefix, lineNumber);
}
java">// (707) 867-5309
System.out.println(new PhoneNumber(707, 867, 5309));

不足之处是,如果这个类被方法使用,一旦指定格式,就必须始终如一的坚持使用下去。

如果不定制格式,则可以凭自己的想法返回信息,现代IDE都会生成对象的信息。

无论是否使用格式,都应该在注释中,明确说明toString的意图。

例如要指定格式,注释可参考:

java">    /**
     * 返回此电话号码的字符串表示形式。
     * 该字符串由十四个字符组成,其格式为“(XXX) YYY-ZZZZ”
     * XXX是areaCode,YYY是prefix,ZZZZ是lineNumber
     * <p>
     * 如果这个电话号码的三个部分都太小,不能填满它的字段,可以用0填充。
     * 例如lineNumber是"123",则可填写成"0123"。
     * <p>
     * 注意,(areaCode)和prefix中间有一个空格。
     */
    @Override
    public String toString() {
        return String.format("(%03d) %03d-%04d", areaCode, prefix, lineNumber);
    }

如果不指定格式,也应该在注释中有所指明:

java">    /**
     * 返回一个简要说明,具体细节未经说明,并有可能发生变化。
     * 以下是一个简单的实例:
     * [PhoneNumber: areaCode=123, prefix=456, lineNumber=7890]
     */
    @Override
    public String toString() {
        return String.format("(%03d) %03d-%04d", areaCode, prefix, lineNumber);
    }

重写toString方法优化

  • 提供好的toString实现可以使类用起来更加舒适;
  • 在实际应用中,如果对象太大,或信息难以用字符串表达,就应该返回一个摘要信息;
  • 应该为toString返回值中包含的所有信息,提供一个getter方法;

转载于:https://my.oschina.net/u/2450666/blog/1647541


http://www.niftyadmin.cn/n/1270911.html

相关文章

鸿蒙系统怎么调用其他摄影头,鸿蒙分布式技术突破摄像头空间使用想象

“华为智选品鉴会”在深圳举行&#xff0c;本次品鉴会以“给全场景智慧生活添点温度”为主题&#xff0c;一次性发布了16款华为LoT智能产品&#xff0c;并在多个产品上首次搭载应用了鸿蒙分布式技术。据悉&#xff0c;2020年是华为IoT生态业务的崛起之年&#xff0c;未来5年&am…

JSX,了解一下?

JSX是神马 书写规范JSX中的{} 属性children防止xss其它注意事项JSX 与 单入口JSX 与 模板引擎的区别JSX是对真实DOM的描述JSX是神马 JSX是React中特有的东东&#xff0c;全称 Javascriptのxml。 它的长相是这样的 let jsx <h1>hello</h1>; 复制代码看起来就是一个…

TCP和UDP的最完整的区别

TCP UDPTCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多&#xff0c;UDP较少&#xff1b; 3.UDP程序结构较简单 4.流模式&#xff08;TCP&#xff09;与数据报模式(UDP); 5.TCP保证数据正确性&#xff0c;UDP可能丢包 6.TCP保证数据顺序&#xff0c;UDP不…

登录界面转换实现html,HTML登录界面的实现

实现这个界面非常简单&#xff0c;以前就学过静态网页的开发&#xff0c;虽然学的不精&#xff0c;但还是懂一些的。这次主要是实现对用户名&#xff0c;密码的验证&#xff0c;即验证用户名和密码是否为空&#xff0c;没什么说的&#xff0c;直接看代码吧用户登录function log…

js通过fileReader获取图片的base64格式(pc端和手机端都可以,但是要先在页面中创建dom)...

1 // 创建一个FileReader对象 2 var reader new FileReader();3 4 // 绑定load事件5 reader.onload function(e) {6 console.log(e.target.result);7 }8 9 // 读取File对象的数据10 reader.readAsDataURL(document.querySelector("input[typefile]").files[0])…

html视频播放后自动跳转到页面,【Web前端问题】html视频播放完后跳转

案例#modelView{background-color:#DDDDDD;z-index:0;opacity:0.7;height: 100%;width: 100%;position: relative;}.playvideo{padding-top: auto;z-index: 9999;position: relative;}.zy_media{z-index: 999999999}您的浏览器不支持HTML5视频//document.documentElement.style…

elasticsearch-更新文档

2019独角兽企业重金招聘Python工程师标准>>> 更新整个文档 文档在Elasticsearch中是不可变的——我们不能修改他们。如果需要更新已存在的文档&#xff0c;我们可以使用《索引文档》章节提到的index API 重建索引(reindex) 或者替换掉它。 PUT /website/blog/123 {&…

Cocos Creator socket.io打包Apk后无法连接

最近在使用Cocos Creator 1.7版本开发一款棋牌游戏&#xff0c;在浏览器中运行正常&#xff0c;但在模拟器里或打包成Apk后&#xff0c;socket.io总是连接失败&#xff0c;具体提示 内容如下: IOS没有试&#xff0c;估计也是一样。百度了很久&#xff0c;看到有人说可能是Cocos…