2013-07-21 80 views
2

privateprivate小号1000之后,它发生,我认为它可能不需要是否需要声明私有嵌套类的内部私有?

public class Outer { 

    private static class Inner { // you may drop static 
     private void innerMethod() {} 
    } 
} 

无论如何innerMethod()下降private将使在封装(或使用差异 ,例如Outer)?也想想反射
如果不是是否建议放弃它或保持它的vis编码风格?

我说没有下降但不知道真的。

编辑:只是意识到我做到这一点肯定是错误的 - 至少对于Inner领域 - 宣称这些领域的私人然后在外部类中使用它们 - 因为这会产生(“合成的”)字节码中的访问器 - 这至少是膨胀的。好极了 - 所以现在我更感兴趣的是对这些(Inner的字段,Outer中使用的字段,方法)包私有(或公开为@JBNizet在评论中说)的安全影响进行说明。

+0

即使它没有什么区别,我通常会从封闭类public和其他private被调用的方法。不知道这是不是一个标准的做法。 –

+0

@JBNizet:'Outer'可以访问所有内容 - 不是吗?我会让他们和私人无论如何 - 少修改一个 –

+1

是的,因此,“即使它没有区别”的部分。 –

回答

5

答案取决于你目前如何使用内部类。

我的内部类哲学是减少重构的负担。我维护内部类的封装:private内部类的方法和字段是而不是即使它们可以从外部类访问。那么,内部类的重点是将其范围缩小到仅包含类。这样,如果稍后内部类可以在其他地方重用,它几乎不需要工作(并且对于非内部类而言只需要少量的工作)就可以将其移入其自己的文件中。

无论以上是否是您的风格,都会影响以下删除或保留方法/字段周围private的原因。

用于丢弃private的原因是:

  • 外类访问私有成员和内部类的方法,这意味着这样的字段/方法不是真的包封
  • 少键入

反对下探private的原因是:

  • 制作一个内部类private的方法作为文档:在外部类不应使用这些方法
  • 如果private保持,这使得它更容易促进内部类,以它自己的文件
  • 如果private被删除,有两种款式供public内部类和private内部类:多为程序员考虑
  • 如果private被丢弃,内部类制成public,突然大家谁有权访问外部文件可以访问内部类的priv吃数据

鉴于上述风格,我认为防止下跌的情况更强。

+0

有效点 - 尽管是什么(如果有的话)可以从外_。另外“使内部类的私有方法成为文档:外部类不应该使用这些方法” - >我这样做的方式使用它们 - 你的方式,如果内部是外部使用的外部方法无论如何突然变成私人包装(不是“每个人都可以访问”,除非你公开)。我认为你需要总结你的观点2和4是一样的。 –

+0

@Mr_and_Mrs_D还好点;我做了一些编辑(并将继续这样做)。在我的风格中,我不会称之为内部类的“私人”方法。我的主要观点是,省略'private'(或称为'private'方法)会使重构变得更加困难,我会尽量使这一点更加清晰。 – kuporific

+0

嗯 - 需要重新思考 - 请考虑安全隐患 - 也许这是真正的原因,而不是重构?请参阅:http://stackoverflow.com/a/5559064/281545。我的意思是这个方法不再是私有的 - 它是私有的 –