1

java がclass SpecificDialogあり、そのクラス内にpublic static class Buildera のオブジェクトを構築するために使用されている場合、が内部にあるSpecificDialog理由は、SpecifcDialogs の構築にのみ使用できるため、論理的にそこに属しているためです。これが主な理由ですか?BuilderSpecificDialog

しかし、Builderが内部SpecificDialogにある場合、 のすべてのフィールド/メンバーにSpecificDialogアクセスできます。外部からそのようなプライベート フィールドを誤って変更する可能性があるため、これは望ましくない場合があります。privateBuilderBuilder'sSpecificDialog

それについては何もできないのでしょうか。

4

2 に答える 2

1

内部クラスを宣言する主な理由は、複雑なコードを構造的に分離して再編成し、コールバックを使用してJavaの欠点に対処する方法を提供することです(たとえば、Java 8でついに利用可能になるクロージャと同等のものとして)。

本質的に、内部クラスは外部クラスの構造部分であるため、すべてのメンバーへの完全なアクセスは問題ないだけでなく、望ましいものです。これが実際にこれを便利なツールにしているのです。この機能がないと、内部クラスは他のクラスとまったく同じように動作するため、利点はありません。

于 2012-11-01T10:31:55.533 に答える
1

どのデザインを選択しても、すべきでないことを不注意に行う可能性が常にあります。ビルダーをビルドするクラスの静的内部クラスにすることは、外部クラスがビルダーのプライベートフィールドにアクセスできるために正確に使用される一般的なイディオムです。ビルダーを、プライベートフィールドやメソッドのように、外部クラスの不可欠な部分と見なし、クラスとそのビルダーが正常に動作することを確認します。

于 2012-11-01T10:32:06.240 に答える