フィールドを非プライベートにすると、これらのプライベート メンバーにアクセスするための合成メソッドが作成されるのを回避できます。あなたの例では、コンパイルされOuter$Inner
たクラスには次のような合成メソッドが含まれています。
static int access$002(Outer$Inner, int);
Code:
0: aload_0
1: iload_1
2: dup_x1
3: putfield #1 // Field v:I
6: ireturn
たぶんそれは何もインライン化されないかもしれませんが、そうではないかもしれません...しかし、その存在を強制する理由v
がない限り、デフォルトのアクセス権を与えないのはなぜですか?
フィールドを直接使用するのではなく、アクセサメソッドを使用することに関しては...それは好みの問題です。外部クラスがフィールドに直接アクセスすることを防ぐことはできないため、クラス内のプライベート フィールドのアクセサーを作成する必要があるかどうかを尋ねるのと少し似ています。
別の回答で述べたように、アクセサーを使用すると、リファクタリングしやすくなります。ネストされたクラスは、移動する必要のない単なる実装の詳細ですか? なら、いいかも。他の動作を持たないフィールドをカプセル化するだけのそのようなクラスがある場合、フィールドを公開して (プライベート クラス内で、忘れないでください) 「ねえ、ここでは何もチェックしていません」と宣伝することがわかりました。 ...」