是否需要将私有嵌套类的内部声明为私有?

时间:2013-07-21 13:05:01

标签: java security reflection coding-style encapsulation

private中{000} private之后,我发现它可能不需要

public class Outer {

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

是否任何情况private中删除innerMethod()会对封装产生影响(或使用 ,例如Outer)?想想反思
如果,建议放弃它还是保持它的编码风格?

我会说没有放弃但不确定。

编辑:刚才意识到这样做的方式肯定是错误的 - 至少对于Inner字段 - 将这些字段声明为私有然后在外部类中使用它们 - 因为这会在字节码中生成(“合成”)访问器 - 这至少是膨胀。太棒了 - 所以现在我更感兴趣的是,在声明那些(Inner的字段,Outer)包中私有的方法(或@JBNizet在评论)

1 个答案:

答案 0 :(得分:5)

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

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

以上是否是您的风格将影响以下原因:放弃或保留private方法/字段。

放弃private的原因是:

  • 外部类可以访问私有成员和内部类的方法,这意味着这些字段/方法不是真正封装
  • 少打字

拒绝private的原因是:

  • 使内部类private的方法充当文档:外部类不应使用这些方法
  • 如果保留private,则可以更轻松地将内部类提升为自己的文件
  • 如果private被删除,public内部类和private内部类有两种样式:程序员可以考虑更多
  • 如果删除private并且内部类已成为public,则突然有权访问外部文件的所有人都可以访问内部类的私有数据

鉴于上述风格,我认为反对下降的情况更为强烈。