Java 版 (精华区)
发信人: cameran (竹晨), 信区: Java
标 题: Java 程序中有效字段的可见性
发信站: 哈工大紫丁香 (2001年10月10日09:22:57 星期三), 站内信件
Java 程序中有效字段的可见性 英文原文
标识、实现和访问字段
Scott W. Ambler
总裁,Ronin International
2000 年 9 月 28 日
字段,又称为属性或成员属性,是对象的数据方面。字段的可见性定义 Java 对象对其
的访问级别。本周的讨论改编自 The Object Primer 2nd Edition 的第 7 章和第 8 章
,着重讨论字段可见性的类型、如何实现字段及如何访问它们。
表 1 描述了字段可见性的三种类型,标示了“统一建模语言 (UML)”符号、Java 关键
字、可见性含义的描述和对该可见性推荐的正确用法。您可以看到,字段可见性的规则
和标记都与成员函数可见性的规则和标记一致。后者在上周讨论过。
表 1. Java 程序中字段的可见性
可见性 UML 符号 Java 关键字 描述 推荐用法
公共 + public 任何其它对象或类中的任何其它方法都可以访问公共字段。 不要将字段
定义为公共的。
受保护 # protected 声明该字段的类中的任何方法或者该类子类中定义的任何方法都可
以访问受保护字段。 不要将字段定义为受保护的
专用 - private 只有声明该字段的类中的方法才可以访问专用字段,该类子类中的方法
是不能访问的。 所有字段都应该是专用的,并由 getter 和 setter 方法(访问器)访
问。
据我的经验,为了隐藏和封装信息,所有字段都应该声明为专用的。将字段声明为受保
护时,子类中的方法就有可能直接访问它们,这样就可能有效地增加类层次结构中的耦
合。这样增加的耦合会使类的维护和增强更为困难;因此,应该避免这种做法。
为了说明如何实现具有不同可见性的字段,我在图 1 中提供了对 Address 类中各个字
段的声明。在源代码示例中,您会看到有些字段可能声明成公共的或受保护的,但这不
是个好主意。
图 1. 声明 Address 类的字段 /**
* The city street of the address
*
* @example 1701 Enterprise Way
*/
private String street;
/**
* The name of the city
*
* @example Metropolis
*/
protected String city;
/**
* The state/province that the address is in
*/
public State state;
/**
* The ZIP code that the address is in
*
* @example 90210
*/
private String zipCode;
决不应该直接访问字段;而应该使用访问器。访问器方法涉及两种方法:setters 和 g
etters(有时分别称为 mutators 和 accessors)。setter 修改字段的值,而 getter
获取它的值。唯一我会考虑违反这一规则的情况是在访问器方法明显影响到应用程序的
性能,而又没有任何其它替代方法将性能改进到可接受的程度时。即使在那种情况下,
我仍会尝试尽量减少直接访问的字段数。顺便说一句,自 1995 年秋开始,我就一直在
从事 Java 技术,至今还没有破坏过这个规则。同时,我已记不清曾有多少开发人员抱
怨访问器方法的性能了。
Java 程序员必须掌握的一个基本概念是:允许对字段直接操作的访问器方法只能是访问
器本身。当然,有可能在定义字段的类的方法中直接访问专用字段,但是您不会这样做
的,因为这将增加类中的耦合。实际上,访问器的使用是 Enterprise JavaBean (EJB)
2.0 环境中对所有持久字段强制执行的一种手段。以后的提示中会涉及访问器方法的有
效使用。
参考资料
有关字段可见性的详细信息,请参阅:
以前在 Java 程序中的成员函数可见性中提到过的提示。
Building Object Applications That Work: Your Step-By-Step Handbook for Devel
oping Robust Systems with Object Technology,Scott W. Ambler 著。 New York:
Cambridge University Press,1998。
Process Patterns -- Building Large-Scale Systems Using Object Technology,Sc
ott W. Ambler 著。New York:Cambridge University Press,1998。
The Object Primer 2nd Edition,Scott W. Ambler 著。 New York:Cambridge Univ
ersity Press,2000。
The Unified Process Construction Phase,Scott W. Ambler 与 Larry L. Constant
ine 合著。Gilroy, CA: R&D Books,2000。
The Java Language Specification ,James Gosling、Bill Joy 与 Guy Steele 合著
。Reading,MA:Addison-Wesley Longman ,Inc.,1996。
Object-Oriented Software Construction, Second Edition,Bertrand Meyer 著。Up
per Saddle River, NJ: Prentice-Hall PTR,1997。
The Elements of Java Style,Alan Vermeulen、Scott W. Ambler、Greg Bumgardner
、Eldon Metz、Trevor Misfeldt、Jim Shur 与 Patrick Thompson 合著。New York:
Cambridge University Press,2000。
--
欲讯秋情众莫知, 喃喃负手叩东篱。
孤标傲世偕谁隐,一样花开为底迟?
圃露庭霜何寂寞,鸿归蛩病可相思?
休言举世无谈者,解语何妨片语时。
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.239.175]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.334毫秒