内部类是否需要公共访问器,如果只从外部类访问?

时间:2012-04-12 19:42:27

标签: java

因为我可以直接访问内部类的private变量而且......访问inner类的唯一方法是通过outer类.. 是否有任何为内部类设置公共访问器/ mutator方法的价值?

public class Outer {
    Inner   i;

    Outer() {
        i.v = 5;
    }

    private class Inner {
        private int v;
    }  
}

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

2 个答案:

答案 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对象,那么它是重要的。对于同步目的而言,这可能也很重要,具体取决于您的内部课程中发生的事情