たちは、クラスA、B、C、D、Eがあるとし2つのクラスのみがアクセスする静的変数を作成できますか?例えば
今Aは、唯一のAとBクラスでは見えないことのpublic static int型変数
私が欲しいこの変数を持っていますC、D、Eで。
変数を保護し、継承を使用することなく、これを行うことは可能ですか?
たちは、クラスA、B、C、D、Eがあるとし2つのクラスのみがアクセスする静的変数を作成できますか?例えば
今Aは、唯一のAとBクラスでは見えないことのpublic static int型変数
私が欲しいこの変数を持っていますC、D、Eで。
変数を保護し、継承を使用することなく、これを行うことは可能ですか?
静的ゲッターが必要です。そのゲッターの中で、例外をスローしキャッチし、呼び出し元をチェックしてからアクセスを許可したり、アクセス拒否例外をスローしたりすることができます。
それ以外の答えは、継承およびその他のよく知られたOOソリューションにあります。
これは、これを実装するための非常に臭い、ハッキングされた方法のように聞こえる。 **はお勧めしません。 –
私はこの回答を承認しませんが、少なくとも例外をスローするのではなく、 'Thread.currentThread()。getStackTrace()'を使用してください。 –
まあ私も。しかし、なぜあなたは最初に 'public static'変数の定義*に反するでしょうか?全体的な質問は私には魚のように聞こえる。 –
クラスAとBを独自のパッケージに入れ、フィールドのデフォルト(パッケージ)の可視性を与えます。 (public
、protected
またはprivate
指定子を与えないでください)。
可視性修飾子を使用しない場合、メンバーはパッケージレベルの可視性を持ち、AとBを同じパッケージに、C、D、Eを別のパッケージに入れることができます。
しかし、ここで明確code smellがあります...あなたは何ができるか
+1臭いです。 –
は別のパッケージにAとBを投げると、パッケージのメンバーに、変数にのみ表示することです。これを行うには、公開か保護されているかなどのユーザーの視認可能性のキーワードを削除するだけです。 Javaの変数のデフォルトの可視性はパッケージです。
aVarとbVarはパブリックでスタティックですが、クラスAとB(およびAB)からのみアクセスできます。
`
public class AB
{
private static class A
{
public static int aVar ;
}
private static class B
{
public static int bVar ;
}
}
`
いいえ、それは公共のです。 –
これで何を達成しようとしていますか? –