目前我们在代码库中运行checkstyle,它会标记任何不使用私有访问修饰符的非静态类字段。
这是一个有效的checkstyle规则,还是存在需要非私有字段的情况?例如,我认为在同一个包中创建JUnit测试用例的原因是他们可以使用默认访问修饰符访问字段?
答案 0 :(得分:7)
面向对象编程的一个主要特征是信息隐藏/封装。这意味着类只允许通过接口访问成员变量:getter和setter方法。因此,其他类无法访问成员变量并以不需要的方式对其进行修改。因此checkstyle规则有效
答案 1 :(得分:6)
Effective Java 2nd的第13项:最小化类和成员的可访问性。
检查一下。它提供了很好的想法。
答案 2 :(得分:5)
恕我直言最好尽可能使字段private
和final
。然而,对于单元测试,将它们打包为私有或通过反射访问它们可能是一种实用的选择。 (这相同的事情)
您也可以采用黑盒测试的方法,这意味着除非您可以通过公共方法确定发生了什么,否则不应对其进行测试。 (或者你的测试需要更加专业化)
答案 3 :(得分:2)
对于像JMockit这样的高级模拟框架,私有访问或终结不是问题。但是,getter / setter可能会在onlder版本的android
上有一些性能答案 4 :(得分:1)
一般来说,使用私有字段是有意义的,但规则有例外。一个可能的例外是您正在处理数据传输对象(DTO),并且您希望与客户明确沟通,设置属性的值不会在后端产生更改。公共领域是一种很好的沟通方式。
答案 5 :(得分:0)
我认为这是一个很好的有效规则,可以确保正确地完成信息隐藏 - 这是OOP的一个重要方面。
使用Public getter和setter方法,而不是对象可以控制对其状态的更改。