是否建议私有静态内部类封装?

时间:2013-03-03 18:20:35

标签: java

如果你在Java中有一个私有静态嵌套类,是否仍然建议使用getter和setter而不是直接字段访问?

一个例子。直接现场访问:

public class Application {
    private List<MyInnerClass> myInnerClassList;

    // ...

    public void foo() {
        MyInnerClass inner = new MyInnerClass();
        inner.bar = 50;
        myInnerClassList.add(inner);
    }

    private static class MyInnerClass {
        private int bar;
    }
}

vs封装:

public class Application {
    private List<MyInnerClass> myInnerClassList;

    // ...

    public void foo() {
        MyInnerClass inner = new MyInnerClass();
        inner.setBar(50);
        myInnerClassList.add(inner);
    }

    private static class MyInnerClass {
        private int bar;

        public int getBar() {
            return bar;
        }

        public void setBar(int bar) {
            this.bar = bar;
        }
    }
}

3 个答案:

答案 0 :(得分:2)

取决于但一般我认为没关系。 使用getter和setter的主要原因之一是隐藏类的用户的实现细节,这样您就可以轻松地更改实现而不会影响用户。

在私有内部类的情况下,这不是问题,因为你既是类的作者又是用户,并且外面没有人可以使用它。

如果您只是用来保存一些数据,那么没有getter和setter会使代码更短,更易读。

但是,如果内部类更大更复杂(通常不是这种情况),那么你应该考虑使用getter / setter。这样,您就可以在代码中向bar添加边界检查。

答案 1 :(得分:0)

建议,因为在某些时候重构和移动课程可能是有意义的。而且,可能希望为其创建接口,等等。可能还有更多原因。

答案 2 :(得分:0)

根据Java教程:“静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是顶级类为了方便包装,它已经嵌套在另一个顶级类中。“

所以我说是的,你通常想要像对待顶级课程一样封装其成员。