Java 是否建议对私有静态内部类进行封装?
如果Java中有一个私有的静态嵌套类,是否仍然建议使用getter和setter而不是直接访问字段 举个例子。直接现场访问:Java 是否建议对私有静态内部类进行封装?,java,Java,如果Java中有一个私有的静态嵌套类,是否仍然建议使用getter和setter而不是直接访问字段 举个例子。直接现场访问: public class Application { private List<MyInnerClass> myInnerClassList; // ... public void foo() { MyInnerClass inner = new MyInnerClass(); inner.bar =
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。这里的重点是类是私有的,所以不应该被视为顶级类。