2016-04-07 9 views
1

Iは、クラスA、クラスBおよびクラスCを有するオブジェクトのアクセス内部クラス

クラスB、クラスAの内部クラスである:

public class A { 

     public class B { 
      String day; 
      HashMap<String, ArrayList<Date>> locationTimes; 
      public B() { 
       locationTimes = new HashMap<String, ArrayList<Date>>();} 
      } 

     **B fieldB;** 

    ..... 
    } 

使用します(問題とは関係ないかもしれません)、クラスAのオブジェクトをクラスCに注入します。

クラスB内のフィールド(String day、HashMap locationTimes)に別のオブジェクトからアクセスしようとしています私はそうすることができません。

何か助けていただければ幸いです。

public class C { 
    private A a; 

    public void doSomething() { 
     a.getB().getDay(); 
    } 
} 

編集:そして、あなたはこのようにBからattrbutesにアクセスすることができます

public class A { 

    private B b; 

    public B getB() { 
    return b; 
    } 

    public static class B { 
     String day; 
     HashMap<String, ArrayList<Date>> locationTimes; 

     public B() { 
      locationTimes = new HashMap<String, ArrayList<Date>>(); 
      day = "Monday" 
     } 

     public String getDay() { 
     return day; 
     } 
    } 
} 

答えて

3

はあなたのようなBのインスタンスを作成する必要がいずれかprivateをするあなたのクラスBを必要としますまたはpublic static

+0

私のクラスCでは、a.getB()。dayを実行すると "day"はpublicではなく、外側。クラスBを静的と静的の両方で同じ結果で作成しようとしました。 – runios

+1

属性のためにクラスBにpublic getterを記述する必要があります。 – Dimi

+0

すぐに私の答えを更新します – Dimi

0

ええ、あなたはどこかのBのインスタンスを持つ必要があります。

あなたのケースでは、コンテナのようなのインスタンスを作成します

public class C { 

@Inject 
A a; 

void someMethod() { 
    a.doit(); 
    A.B b = new A.B(); 
    b.doitToo(); // will work 
} 
} 
+0

私がクラスに注入するオブジェクト "a"はシングルトンであり、すでにオブジェクトbが以前からインスタンス化されています。私は今、オブジェクト "b"内のフィールドにアクセスしようとしていますが、できません。このフィールドは公開されておらず、外部からアクセスすることはできません。私は同じ結果を持つ静的および非公式の両方のクラスBを作成しようとしました – runios

+1

Bのパブリックゲッター/セッターが必要です! Bのフィールドを公開することもできますが、これは良いコーディングスタイルとはみなされません。 Bにpublic void setSomeField(Object someField){this.someField = someField;}のようなメソッドを記述し、public Object getSomeField(){return this.someField;}のようなgetterを記述します。私はインスタンスbをcからアクセスするようにするために、bのためにAのgetter/setterを持つ必要があります。 –

0

私はあなたがあなたの内部クラスのインスタンスを持っていない推測していますか?その場合は、自分で作成する必要があります。外部クラスの中で

あなたは

public class Outer { 
    Inner myInner; 

    public Outer(){ 
     myInner = new Inner(); 
    } 
} 

内部クラスの新しいインスタンスを作成することができますし、外部から直接内部クラスにアクセスする必要がある場合は、そのインスタンスのgetterメソッドを持つことができます。

この回答は、彼が変更した点で、内部クラスを元の質問とは異なる入れ子になった静的クラスに変更した点で、Dimi'sとは異なります。 (また、それは不完全で、静的なネストされたクラスを使用する意図された方法ではありません)

関連する問題