我最近在一个项目中看到了一些代码,其中几个类中的某些字段一直在使用默认访问修饰符而没有充分的理由。它几乎看起来像一个“哎呀,忘了让这些私人”。由于类几乎完全在它们定义的包之外使用,因此字段在调用代码中是不可见的,并被视为私有。因此,错误/疏忽不会非常明显。
然而,封装被破坏了。如果我想在现有的包中添加一个新类,那么我可以使用具有默认访问权限的字段来处理对象中的内部数据。
所以,我的问题:
答案 0 :(得分:2)
在风格方面,我看过一些风格指南,建议在评论中加上“包”来表示它是故意的。像这样:
/*package*/ int myInt;
遗憾的是Java语言规范不允许明确使用“package”;毕竟,它已经是一个保留的关键字了!
答案 1 :(得分:0)
我建议在代码库上运行UCDetector。从主页:
UCDetector为以下问题创建标记,这些问题出现在日食问题视图中:
- 不必要的(死的)代码
- 可见度可以更改为受保护,默认或私有的代码
- 字段的方法,可以是最终的
答案 2 :(得分:0)
按照惯例,您不应该在他的包中定义您的类。作者有理由做出这个假设,他应该是唯一一个访问这些包变量的人。
如果您选择违反该惯例,您将被允许,您应该知道自己在做什么。你知道你还可以做些什么来搞乱设计,因为你有源? 一切的!
访问级别毕竟是一个荣誉系统。它可以帮助你,但它不是你的独裁者。
JDK类广泛使用包级变量。这也是我的最爱。 public
和protected
对于公共API有重要作用,private
当你真的很偏执而你甚至不相信自己时。对于其他一切 - 默认/包级别,允许作者自由访问,但用户难以访问。
“作者如何如此傲慢,并认为他不必将他的私人变量标记为私人?他的工作是错误的!” - 好吧,你是谁?你的生意是怎样的?
显然,Java创建者认为应该是最常用的级别,因此我们应该保存一些关键点击,并且不要在其上强加关键字。