处理Java默认级别访问说明符

时间:2010-05-27 15:12:23

标签: java java-ee annotations

我最近在一个项目中看到了一些代码,其中几个类中的某些字段一直在使用默认访问修饰符而没有充分的理由。它几乎看起来像一个“哎呀,忘了让这些私人”。由于类几乎完全在它们定义的包之外使用,因此字段在调用代码中是不可见的,并被视为私有。因此,错误/疏忽不会非常明显。

然而,封装被破坏了。如果我想在现有的包中添加一个新类,那么我可以使用具有默认访问权限的字段来处理对象中的内部数据。

所以,我的问题:

  1. 我应该注意哪些有关默认访问说明符的最佳做法?什么能帮助防止此类事故再次发生?
  2. 是否有任何注释可能会说明“我真的打算将这些作为默认访问”?
  3. 使用CheckStyle或任何其他Eclipse插件,是否有任何方法可以标记默认字段的实例,或者不允许任何不附带例如“//默认访问”的评论尾随它们?

3 个答案:

答案 0 :(得分:2)

在风格方面,我看过一些风格指南,建议在评论中加上“包”来表示它是故意的。像这样:

/*package*/ int myInt;

遗憾的是Java语言规范不允许明确使用“package”;毕竟,它已经是一个保留的关键字了!

答案 1 :(得分:0)

我建议在代码库上运行UCDetector。从主页:

  

UCDetector为以下问题创建标记,这些问题出现在日食问题视图中:

     
  • 不必要的(死的)代码   
  • 可见度可以更改为受保护,默认或私有的代码   
  • 字段的方法,可以是最终的

答案 2 :(得分:0)

按照惯例,您不应该在他的包中定义您的类。作者有理由做出这个假设,他应该是唯一一个访问这些包变量的人。

如果您选择违反该惯例,您将被允许,您应该知道自己在做什么。你知道你还可以做些什么来搞乱设计,因为你有源? 一切的!

访问级别毕竟是一个荣誉系统。它可以帮助你,但它不是你的独裁者。

JDK类广泛使用包级变量。这也是我的最爱。 publicprotected对于公共API有重要作用,private当你真的很偏执而你甚至不相信自己时。对于其他一切 - 默认/包级别,允许作者自由访问,但用户难以访问。

“作者如何如此傲慢,并认为他不必将他的私人变量标记为私人?他的工作是错误的!” - 好吧,你是谁?你的生意是怎样的?

显然,Java创建者认为应该是最常用的级别,因此我们应该保存一些关键点击,并且不要在其上强加关键字。