"Accessors increase robustness of Java code" 中引入了访问(读写)方法(直接操纵字段值的成员函数)。有两种访问方法:setter,用于修改字段值;以及 getter,用于获取字段值。读写方法确实会为代码增加一些开销,但这些开销很小 -- 特别是与象有问题的数据库设计这样的其它因素相比。在本文中,我将讨论两个基本问题:为什么应该使用读写方法以及何时不应该使用?
为什么使用读写方法? 读写方法以下列方式改进类和组件的可维护性:
getter 的一种高级用法是获取常数值。遗憾的是,这种技术在 Java 编程世界中不很常见。常见的是使用 use static finals 来实现“常数”值,这是一种与信息隐藏的面向对象概念背道而驰的方法。而将常数值封装在一个静态 getter 方法中则会给您一个强健得多的解决方案。当那些值发生更改、或从常数演变成一个根据已定义的商业规则集计算出的值时,您只需要在 getter 中更新该值,而无需更新使用该常数的每一行代码。静态字段并不理想,但是当常数值不可能更改(例如一星期内的天数)时,也可以使用这种方法。然而,当常数 代表一个用户定义的值(例如共有基金必须包含的最小值)时,您将冒着这个值可能改变的风险,因此最好用静态 getter 方法来实现它。
|
您可能不想使用读写方法的唯一情况是在执行时间极其重要时,但事实上,应用程序中增加的耦合却很少能证明这种行为。在 Concurrent Programming in Java(请参阅 参考资料)中,Lea 用这点来证明其“尽量少用读写方法”的观点:组合中的属性值常常必须一致,单独提供对属性的访问是不明智的。他说得对,因此不要公开所有读写方法!在这种情况下,我将实现一种整批 setter 方法,该方法将立刻更新几个属性、适当地确认其商业值,然后调用更新单一值的专用 setter 方法。我想,Lea 忽略了无需使所有读写方法公开这一观点(如同我在 "Java accessor visibility" 中所指出的)。顺便提一句,整批 setter 方法在 EJB 1.x 开发工作中十分常见,它用于阻止标准和性能的降低,并实现持久性。简而言之,当某些属性值取决于其它值时,您应该引入能做“正确事”的方法,并根据需要使适当的读写方法成为受保护的或专用的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/374079/viewspace-130089/ ,如需转载,请注明出处,否则将追究法律责任。