【发布时间】:2014-03-27 07:42:06
【问题描述】:
如果我可以通过 getter-returned 引用来改变私有变量的值,那不是绕过了 setter 方法吗?它不是破坏了getter-setter和私有变量的目的
public class Test{
private Dimension cannotBeChanged;
public Test(int height, int width)
{
if(height!=3)
cannotBeChanged.height = height;
if(width!=3)
cannotBeChanged.width = width;
}
public Dimension getDimension()
{
return cannotBeChanged;
}
public void setDimension(int height, int width)
{
if(height!=3)
cannotBeChanged.height = height;
if(width!=3)
cannotBeChanged.width = width;
}
public static void main(String [] args)
{
Test testOne = new Test(5,5);
Dimension testSecond = testOne.getDimension();
testSecond.height = 3; //Changed height and width to unwanted values
testSecond.width= 3;
}
【问题讨论】:
-
好吧..如果不希望别人更改实际数据,您必须使用防御性副本... return new Dimension(cannotBeChanged); (复制构造函数....)
-
我希望我的问题能因为这样一个愚蠢/简单的问题而获得如此多的支持。
标签: java private getter-setter