1

因为我可以private直接访问内部类的变量并且......访问inner类的唯一方法是通过outer类..为内部类提供公共访问器/突变器方法有什么价值吗?

public class Outer {
    Inner   i;

    Outer() {
        i.v = 5;
    }

    private class Inner {
        private int v;
    }  
}

出于此问题的目的,假设访问时不需要延迟实例化或其他数据操作。

4

2 回答 2

5

好吧,将字段设为非私有将避免创建合成方法来访问这些私有成员。在您的示例中,编译的Outer$Inner类包含如下合成方法:

static int access$002(Outer$Inner, int);
   Code:
      0: aload_0
      1: iload_1
      2: dup_x1
      3: putfield      #1                  // Field v:I
      6: ireturn

也许它会被内联到什么都没有,也许它不会......但是除非有任何理由强制它存在,否则为什么不直接提供v默认访问权限?

至于使用访问器方法而不是直接使用字段......这更像是一个品味问题。您不能阻止外部类直接访问字段,所以这有点像询问您是否应该为类中的私有字段创建访问器。

正如另一个答案中提到的,使用访问器使其对重构更加友好。嵌套类只是一个永远不需要移动的实现细节吗?如果是这样,也许那很好。我发现如果我有一个像这样的类,它只是封装没有其他行为的字段,我会公开这些字段(在私有类中,不要忘记)宣传“嘿,我没有在这里检查任何东西……”

于 2012-04-12T19:45:43.460 回答
1

如果稍后您可能会通过函数调用或其他方式公开您的 Inner 对象,那么是的,这很重要。它对于同步目的也可能很重要,具体取决于您的 Inner 类中发生的事情

于 2012-04-12T19:45:32.093 回答