繁体   English   中英

为什么我可以从 Class 外部访问私有变量?

[英]Why Can I Access Private Variable From Outside Class?

我的任务是找出如何查看但不编辑来自另一个 class 的私有 int。 我尝试了一些过于复杂的事情,但有效的是:

public int getC() { 
return myC; 
 }

myC 是一个私有整数。 让另一个 class 访问私有变量真的这么容易吗? 我以为他们不能分享。 有人可以解释为什么允许这样做吗? 谢谢。

您创建了一个公共getter function 来访问私有变量。 因此,如果另一个 class 将您的 class 的实例作为其局部变量,它可以使用公共函数(getter)来访问原始 class 的私有变量。

公开私有字段的唯一方法是通过accessors又名getters

但是你应该遵循两条规则:

  • 避免通过 getter(ide 快捷方式)直接公开所有私有字段的诱惑。 仅在确实需要时添加它们。

  • 如果您公开的类型不是不可变的,请注意不要通过返回防御性副本来escape references

示例:

private Date date;
public Date date() {
   return date;
}

这段代码破坏了封装,它和这样做是一样的。

public Date date;

要解决这个问题,您有 2 个解决方案

  • 返回您约会对象的防御性副本
public Date date() {
   return new Date(date.getTime());
}
  • 使用不可变版本的 Date -> LocalDate

相同的逻辑适用于集合类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM