10

如果您在 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;
    }
}

与封装:

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;
        }
    }
}
4

3 回答 3

2

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

在私有内部类的情况下,这不是问题,因为您既是该类的编写者又是该类的用户,外部没有人可以使用它。

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

但是,如果内部类更大更复杂(通常情况并非如此),那么您应该考虑使用 getter/setter。例如,这将使您能够bar在代码中添加边界检查。

于 2013-03-03T18:27:38.960 回答
0

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

于 2013-03-03T18:24:10.880 回答
0

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

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

于 2013-03-03T18:27:22.417 回答