为数据提供返回String形式的编程访问,不只是toString()
来源:互联网 发布:java求最小素数 编辑:程序博客网 时间:2024/06/01 08:23
这个建议来自Joshua Bloch的“Provide Programmatic Access to All Data Available in String Form”。我这里以他的提纲为基础然后结合自己的理解写了这篇短文。
这个建议的意思是如果你写一个模块就要把模块里面可以公开的数据信息以String形式提供给客户。因为如果你不提供这样的String访问接口,那么这个使用这个模块的客户要得到一些这个模块信息的时候会感到很不方便。更糟糕的是可能他自己去解析能够得到的String信息。很多时候这个String就是来自toString()的返回。
他举了个例子就是java.lang.Throwable.getStackTrace()。
这里的getStackTrace()就是很好的例子。当你抓到一个Throwable(一般就是Exception)就可以调getStackTrace()得到StackTraceElement数组,然后用循环把异常的详细信息以String的形式展现出来。而且客户还可以用StackTraceElement的函数对每个StackTraceElement来获取信息。如果没有这个getStackTrace(),用户就要自己从printStackTrace()里面去解析异常的详细信息,解析这个栈的确让人很痛苦。如果说用toString(),您试一下,它只能打出当前栈顶元素的信息。
这里我认为值得强调的是2个地方,一个是"All Data Available"里面的"All",另一个"Available"。先说All,因为你不能假设你的客户代码会永远不访问某个数据,因此要把所有的数据信息都提供出来,也就是做+法。再说Available,这个意思是要访问权限最小化,这也是OO的一个原则,这就是个-法。举个例子,譬如大家都知道ArrayList是由数组实现的,而这个数组的真实大小是小于等于size()的。这个时候要不要提供这个数组的长度的方法呢?当然不要,因为这不是List接口要求,对ArrayList来说用户也不需要关心。
翻看自己以前写过的代码,啊,很多没有遵循这个规则。有些是把所有信息都写到toString(),以至于客户代码要解析toString()的字符。还有些就算是写了toString()也没有涵盖所有的公开信息。很多信息都是在客户代码里面解析实现。因为这样的String一般都是给人看的,所以这样的痛苦的代码都是在写log的时候用的。当他们要在log里面打印这个对象信息的时候,get这个字段,get那个字段,然后判断逻辑最后组成String。 这原本是这个类自己的职责。
- 为数据提供返回String形式的编程访问,不只是toString()
- # Java中遍历Object的属性和属性值,并以String形式返回||toString()一个对象Object||将一个对象转化为字符串String
- 在回调API提供方不确定提供数据的形式的时候,判断数据是怎么提交过来的
- 返回List 形式的数据
- dom4j方式访问远程WebService返回xml形式的String类型
- String类型的toString()返回的是什么
- Android 内容提供器---内容提供器基础(提供器访问方式的替代形式)
- Android 内容提供器---内容提供器基础(提供器访问方式的替代形式)
- 圆的,不只是月
- 未定义行为:不只是编程语言
- 学会思考,而不只是编程
- 学会思考,而不只是编程
- 学会思考,而不只是编程
- 大数据实时推荐-不只是统计
- 大数据实时推荐-不只是统计
- 大数据实时推荐-不只是统计
- String 的toString()方法
- JAVA编程中关于toString()和new String()的区别
- 写在清明(2007年)
- 如何:了解向方法传递结构和向方法传递类引用之间的区别(C# 编程指南)
- KDevelop与libtool的问题
- oracle 分页 存储过程
- Hibernate入门实例——Hibernate对象状态(Object states)
- 为数据提供返回String形式的编程访问,不只是toString()
- Hibernate入门实例——Hibernate分页查询
- ubuntu use step by step
- 《PDF格式套件专业版2010》(PDF Suite Professional Edition 2010)v9.0.41.39278 英文/多语言[压缩包]
- Hibernate入门实例——条件查询(Criteria queries)
- Hibernate入门实例——外置命名查询(Externalizing named queries)
- Hibernate入门实例——使用原生SQL的查询
- 做人好累
- Minimal search cost DP+平行四边形优化