为什么Checkstyle中默认不允许使用受保护的变量?

时间:2011-12-11 16:17:42

标签: java oop checkstyle

我在日食中收到很多警告:

  

变量' myVariable'必须是私人的,并有访问方法。

我想我得到它们是因为我没有在eclipse中手动将protectedAllowed设置为true。但是为什么默认设置为false?我不应该使用受保护的属性吗?

3 个答案:

答案 0 :(得分:26)

理论上,受保护的属性(变量)是面向对象语言中的反模式。如果只有子类需要访问其超类的成员属性,则将属性本身定义为private,并创建受保护的访问器方法(getter和setter)。这种方法适用于“信息隐藏”的概念。还有一种替代解决方案:定义受保护的不可变(最终)成员属性。

进一步阅读:

答案 1 :(得分:18)

我想,让一切都变得私密是一种反模式。通常,类在一堆中使用,并且整体表示放置在单独包中的封装实体。他们不需要彼此隐藏某些东西,但是这条规则强制隐藏起来没有充分的理由,增加了混乱并有效地使风格(据我所知)变得更糟。同时,我们经常看到包中的每个类都是公共的。我想这更糟糕,但checkstyle不会检查。

封装不仅存在于类级别,也存在于包,系统等上。我认为这些水平更为重要。

答案 2 :(得分:5)

允许包访问简化了包中的编程,并减少了样板代码。通常,只需要从包中进行访问。私有访问迫使您创建许多几乎无用的访问器方法。这实际上具有减少封装和信息隐藏的效果,因为类必须通过公共访问器方法公开内部数据/结构应用程序而不是仅通过包广泛。默认的包可见性也使测试更容易,因为测试类也存在于同一个包中(在测试目录/树中)。