Java 是否建议对私有静态内部类进行封装?

Java 是否建议对私有静态内部类进行封装?,java,Java,如果Java中有一个私有的静态嵌套类,是否仍然建议使用getter和setter而不是直接访问字段 举个例子。直接现场访问: public class Application { private List<MyInnerClass> myInnerClassList; // ... public void foo() { MyInnerClass inner = new MyInnerClass(); inner.bar =

如果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;
    }
}
公共类应用程序{
私有列表myInnerClassList;
// ...
公共图书馆{
MyInnerClass内部=新的MyInnerClass();
内压杆=50;
添加(内部);
}
私有静态类MyInnerClass{
私人酒吧;
}
}
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;
        }
    }
}
公共类应用程序{
私有列表myInnerClassList;
// ...
公共图书馆{
MyInnerClass内部=新的MyInnerClass();
内缩节(50);
添加(内部);
}
私有静态类MyInnerClass{
私人酒吧;
公共int getBar(){
返回杆;
}
公共空间立根杆(内线杆){
这个.bar=bar;
}
}
}

建议这样做,因为在某些情况下,重构并将类移到外部可能是有意义的。此外,可能需要为其创建一个接口,等等。可能还有更多的原因。

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


所以我想说是的,您通常希望像封装顶级类一样封装它的成员。

视情况而定,但通常我认为这是可以的。 使用getter和setter的主要原因之一是对类的用户隐藏实现细节,以便您可以轻松地更改实现而不影响用户

在私有内部类的情况下,这不是一个问题,因为您既是该类的编写者又是该类的用户,外部的任何人都不能使用它

如果您只是将一些数据保存在一起,那么没有getter和setter将使代码更短、更可读


<>但是,如果内部类更大,更复杂(通常不是这样),那么你应该考虑使用GETSt/Stter。这将使您能够,例如,在代码中向
添加边界检查。

封装通常是一件好事,可以使类彼此独立(例如,您可能希望更改分配
的方式)。但这也取决于您想对
MyInnerClass
执行什么操作。如果除了包含它的外部类之外没有其他人能够访问该innerclass,那么如果需要使用getter和setter,则重构它相对容易。所以我只需要使用一个普通变量。在移动它的时候,可以添加getter和setter。这里的重点是类是私有的,所以不应该被视为顶级类。