パッケージに分割された Java プログラムを作成しています。クラスで定義されているスコープ内のクラスとそのサブスコープにアクセス許可を与えるにはどうすればよいですか。
たとえば、app.A、app.A.Sub、app.B の 3 つのパッケージがあります。また、パッケージ AI にはクラス GlobalA があります。
パッケージ app.A と app.A.Sub のみが GlobalA を使用できるようにしたいのですが、app.B は使用できません。
どうすればいいですか?
There is absolutely no hierarchy in java packages. There are just names.
So package a.suba
and a
have no special relation. You have no way to give special rights to "sub packages".
The rules of access modifiers
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
Based on the rules above you want GlobalA to be the default (no modifier) access. Which will prevent B and anything not inside the packageA from seeing it. Now it should be known when you declare a .java file you do need something to have a public modifier attached to an Object that has the same name as the .java file. I.e. public class Foo resides in Foo.java
SubA
とはどちらもへB
の「外部」パッケージであり、アクセス修飾子によって許可または禁止されるものはすべて、同様の方法ですべての「外部」パッケージに適用されるため、単純にアクセス修飾子を使用してとA
を区別することは論理的に不可能に思えます。SubA
B
リフレクションを使えば可能かもしれませんが、それだけの価値はないと思います。
Java は言語のサブパッケージのモデルを実際には使用しません。関連するコードを整理するための便利な方法にすぎません。つまり、packagesa
およびa.b
(b
ここで、用語では、a.b
は の「サブパッケージ」です) がある場合、package 内のコードにさまざまな方法で影響を与えるa
、package 内のクラスのアクセス修飾子を使用して何もできません。Javaに関する限り、のクラスへのアクセス権はまったく同じです。a
a.b
b
a.b
b
a