2012-01-14 6 views
0

たちは、クラスA、B、C、D、Eがあるとし2つのクラスのみがアクセスする静的変数を作成できますか?例えば

今Aは、唯一のAとBクラスでは見えないことのpublic static int型変数

私が欲しいこの変数を持っていますC、D、Eで。

変数を保護し、継承を使用することなく、これを行うことは可能ですか?

+1

いいえ、それは公共のです。 –

+1

これで何を達成しようとしていますか? –

答えて

0

静的ゲッターが必要です。そのゲッターの中で、例外をスローしキャッチし、呼び出し元をチェックしてからアクセスを許可したり、アクセス拒否例外をスローしたりすることができます。

それ以外の答えは、継承およびその他のよく知られたOOソリューションにあります。

+1

これは、これを実装するための非常に臭い、ハッキングされた方法のように聞こえる。 **はお勧めしません。 –

+2

私はこの回答を承認しませんが、少なくとも例外をスローするのではなく、 'Thread.currentThread()。getStackTrace()'を使用してください。 –

+0

まあ私も。しかし、なぜあなたは最初に 'public static'変数の定義*に反するでしょうか?全体的な質問は私には魚のように聞こえる。 –

0

できません。クラスBがクラスAのみである場合、内部クラスを使用できます。

+0

が可能です。本当の疑問はそれが価値があるのです – emory

3

クラスAとBを独自のパッケージに入れ、フィールドのデフォルト(パッケージ)の可視性を与えます。 (publicprotectedまたはprivate指定子を与えないでください)。

3

可視性修飾子を使用しない場合、メンバーはパッケージレベルの可視性を持ち、AとBを同じパッケージに、C、D、Eを別のパッケージに入れることができます。

しかし、ここで明確code smellがあります...あなたは何ができるか

+0

+1臭いです。 –

0

は別のパッケージにAとBを投げると、パッケージのメンバーに、変数にのみ表示することです。これを行うには、公開か保護されているかなどのユーザーの視認可能性のキーワードを削除するだけです。 Javaの変数のデフォルトの可視性はパッケージです。

0

aVarとbVarはパブリックでスタティックですが、クラスAとB(およびAB)からのみアクセスできます。

`

public class AB 
{ 
      private static class A 
      { 
         public static int aVar ; 
      } 


      private static class B 
      { 
         public static int bVar ; 
      } 
} 

`

関連する問題