Getter-Setter和私有变量

gen*_*ous 11 java private getter-setter

如果我可以通过getter返回的引用更改私有变量的值,那么它是否绕过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;
}
Run Code Online (Sandbox Code Playgroud)

Abi*_*san 12

是的,它确实.我在" 清洁准则"一书中的获取者和制定者中得出以下结论; 如果你真的接受它,你可以使用它.

  1. 非常邪恶:公共领域.
  2. 有点邪恶:吸气剂和制定者他们不需要.
  3. 好:只有在真正需要的地方才能获得getter和setter - 使类型暴露出"更大"的行为,恰好使用其状态,而不仅仅是将类型视为由其他类型操纵的状态存储库.