因为我可以直接访问内部类的private
变量而且......访问inner
类的唯一方法是通过outer
类.. 是否有任何为内部类设置公共访问器/ mutator方法的价值?
public class Outer {
Inner i;
Outer() {
i.v = 5;
}
private class Inner {
private int v;
}
}
出于这个问题的目的,假设在访问时不需要延迟实例化或其他数据操作。
答案 0 :(得分: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
默认访问权限呢?
至于使用存取方法而不是直接使用字段...这更多的是品味问题。你不能阻止外部类直接访问字段,所以它是 little ,就像询问你是否应该为类中的私有字段创建访问器一样。
正如另一个答案中所提到的,使用访问器使其对重构更友好。嵌套类只是是从不需要移动的实现细节吗?如果是这样,也许那很好。我发现,如果我有一个类只是封装字段而没有其他行为的类,我将字段公开(在私人类中,不要忘记)来宣传“嘿,我在这里没有检查任何东西......“
答案 1 :(得分:1)
如果稍后您可能通过函数调用或其他方式暴露您的Inner对象,那么它是重要的。对于同步目的而言,这可能也很重要,具体取决于您的内部课程中发生的事情