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

2022-09-01 06:00:45

我在日食中得到了很多警告,如下所示:

变量“myVariable”必须是私有的,并且具有访问器方法。

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


答案 1

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

更多阅读材料:


答案 2

我想,把所有东西都保密是一种反模式。通常类在一堆中使用,并且作为一个整体表示放置在单独包中的封装实体。他们不需要互相隐藏一些东西,但这个规则无缘无故地强制隐藏,增加混乱,有效地使风格(据我所知)变得更糟。同时,我们经常看到包中的每个类都是公开的。我想这要糟糕得多,但是checkstyle没有检查这一点。

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