类的私有成员被返回(可怕)

        Java中类的私有成员的引用是可以被类的的方法返回的,如果这样的程序设计出来的话,它就没有什么封装性可言,甚至造成的后果是难以预料的。

        先来看看下面的例子:
import java.awt.Dimension;
/**
 * 类的私有引用被返回破坏类的封装性
 * @author Sunny
 * @version 1.0
 */
public final class ReturnTest {
 private Dimension d = new Dimension(0,0);
 
 /**
  *
  * @return Dimension
  */
 public Dimension getDimension() {
  return d;
 }
 
 /**
  *
  * @return String
  */
 public String toString() {
  return d.toString();
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  ReturnTest test = new ReturnTest();
  System.out.println("NO change:" + test.toString());
  Dimension d = test.getDimension();
  d.height = -9;
  d.width = 10;
  System.out.println("Changed:" + test.toString());

 }

}
这个程序的执行结果是:
NO change:java.awt.Dimension[width=0,height=0]
Changed:java.awt.Dimension[width=10,height=-9]

        通过这个程序就很明白了,封装性被完全破坏了,造成的后果是可怕的。我们在设计程序是对于复杂数据类型的数据成员,在考虑它要被返回时必须考虑,一种通常的做法是返回该成员的拷贝(clone),针对上面的例子,只需要把getDimension方法改成下面的样子:
public Dimension getDimension() {
  return (Dimension)d.clone();
 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值