12

これの間に実際の違いはありますか

public class OuterClass {
    private class InnerClass {
        public InnerClass() {}
    }
}

この?

public class OuterClass {
    private class InnerClass {
        private InnerClass() {}
    }
}
4

2 に答える 2

10

JVM では実際にはこれが許可されていないため、別のクラスからプライベート メンバーにアクセスするのは少し複雑です。その結果、コンパイラはアクセサ メソッドを挿入するため、処理が少し遅くなったり、スタック トレースがより複雑になったりします。

これらの理由から、パッケージ ローカルのままにします。

ところで、のコンストラクターはどちらかabstract classである必要はありませんpublicprotectedローカルまたはパッケージ化することもできます

private static class A {
    private A() {
        throw new Error();
    }
}
public static void main(String... ignored) {
    new A();
}

追加のスタック トレース要素を出力します。

Exception in thread "main" java.lang.Error
    at Main$A.<init>(Main.java:8)
    at Main$A.<init>(Main.java:6)
    at Main.main(Main.java:12)

コンストラクター パッケージをローカルにすると、2 番目のパッケージが消えます。

于 2013-07-31T17:42:23.300 に答える