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

Mar*_*oma 34 java oop checkstyle

我在eclipse中得到了很多警告:

变量'myVariable'必须是私有的并且具有存取方法.

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

hom*_*ome 27

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

进一步阅读:

  • @Oli Charlesworth:好的,'正式'可能不是正确的术语,如果我说'理论上',你会同意吗? (2认同)

Ror*_*ick 19

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

封装不仅存在于类级别,还存在于封装,系统等方面.而且我认为这些水平更为重要.


Joh*_*gan 7

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