当前位置: 首页 > 面试题库 >

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

韩乐湛
2023-03-14
问题内容

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

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

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


问题答案:

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



 类似资料:
  • 问题内容: 为什么在最终课程中允许受保护的成员? 这不应该是编译时错误吗? 编辑:正如人们指出的那样,您可以使用默认修饰符来获得相同的程序包访问权限。它的行为应该完全相同,因为protected是默认+子类,而final修饰符明确地拒绝了子类,因此我认为答案不只是提供相同的程序包访问。 问题答案: 该改性剂是必要的方法其覆盖从基类的方法,在没有那些构件暴露于所述。 通常,您可以引入很多不必要的规则

  • 问题内容: 让我们举个例子: 很简单,这将打印出来。但是请说我正在使用返回值进行其他操作,例如初始化数据文件并返回不应离开实现类的敏感内部值。为什么Java不允许默认接口方法使用访问修饰符?为什么它们不能被子类保护/私有并可能被提升(类似于_扩展_ 父类的类如何为覆盖的方法使用更可见的修饰符)? 常见的解决方案是迁移到抽象类,但是在我的特定情况下,我具有枚举的接口,因此不适用于此处。我想象它要么被

  • 我们举个例子: 一个常见的解决方案是转移到一个抽象类,但是在我的具体案例中,我有一个枚举的接口,所以在这里不适用。我想这不是被忽略了,就是因为接口背后的原始想法,即它们是可用方法的“契约”,但我想我需要关于这是怎么回事的输入。 我读过“为什么Java 8接口方法中不允许使用”final“?”,其中说: 默认方法的基本思想是:它是具有默认实现的接口方法,派生类可以提供更具体的实现 与关联问题一样,由

  • 为什么我们不能降低能见度,但可以提高能见度? 此外,我需要实现模板模式,其中可见的公共方法只能是基类。

  • 我已经阅读了许多关于堆栈溢出的文章,试图找出为什么下面的代码1不起作用,但代码2起作用。我发现在6版和7版的不同版本中,行为或编译器存在不一致性https://stackoverflow.com/questions/13864464/use-of-uninitialized-final-field-with-without-this-qualifier.这更多地涉及访问默认的最终变量,无论是否有“

  • 我希望Hibernate能够使用受保护的无参数构造函数实例化类,然而,我们得到了:。 更改自: 致: 问题已经解决了。我们使用的Hibernate版本:3.6.10.final。 对于什么时候无参数构造函数必须是而不是才能使Hibernate工作,是否有任何规则?