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

場合によりますが、概ねOKだと思います。ゲッターとセッターを使用する主な理由の 1 つは、実装の詳細をクラスのユーザーから隠して、ユーザーに影響を与えずに実装を簡単に変更できるようにすることです。

プライベート内部クラスの場合、これは問題ではありません。なぜなら、あなたはクラスの作成者であると同時にユーザーでもあり、外部の誰もそれを使用できないからです。

一部のデータをまとめて保持するために使用する場合、ゲッターとセッターを使用しないと、コードが短くなり、読みやすくなります。

ただし、内部クラスがより大きく複雑な場合 (通常はそうではありません)、getter/setter の使用を検討する必要があります。これにより、たとえば、barコードに境界チェックを追加することができます。

于 2013-03-03T18:27:38.960 に答える
0

Javaチュートリアルによると:「ネストされた静的クラスは、他のトップレベルクラスと同じように、外側のクラス(および他のクラス)のインスタンスメンバーと対話します。実際、ネストされた静的クラスは、動作的には、パッケージングの利便性のために、別のトップレベル クラスにネストされています。」

したがって、トップレベル クラスの場合と同じように、通常はそのメンバーをカプセル化する必要があります。

于 2013-03-03T18:27:22.417 に答える
0

ある時点でクラスをリファクタリングして外部に移動することが理にかなっている可能性があるため、これをお勧めします。また、そのためのインターフェースを作成することが望ましい場合もあります。おそらくもっと多くの理由もあります。

于 2013-03-03T18:24:10.880 に答える