5

私は以下のようなプライマリクラスを持っています:

public class classB{

  public classC getObject(String getstring){
     return new classC(getstring);
    }
}

にはclassCコンストラクターがあります。

public class classC{

 String string;

 public classC(String s){
  this.string = s;
 }

 public methodC(int i){
   <using the `string` variable here>
 }
}

これで、classAで作成されたオブジェクトを使用する ができましたclassB(もちろん、 のインスタンスですclassC)。

public classA{
  int a = 0.5;

  <Get the object that was created in classB>.methodC(a);

}

これは、変数がユーザーからのいくつかのアクションで作成され、に格納されclassB、さらにclassCのメソッドで使用されるため、必要です。classB新しいオブジェクトを作成すると、意図しない nullに設定された変数がレンダリングされます。

どうすればこれを達成できますか?

4

2 に答える 2

1

Brandが軽量オブジェクトであり、重量が大きいと仮定すると、軽量オブジェクトRunのコンテナを含むフィールドを作成し、それを非表示にすることをお勧めします。

ただし、Brandコンテナが属するコンテナにアクセスする必要がある場合は、マッピングを使用して実行できますが、単に を に注入するだけなので、RunBrand実装するRunableか、JSR330 で注釈を付けたほうがよいでしょう。そしてRun、通常の方法で を介してコンテナにアクセスします。

class MainClass {
  public static void main(String[] args) {
    Run r = new Run();
  }
}

class Run {
  private Container con1 = new Container();

  public Run() {
    Brand cola = new Brand("Coca Cola");
    Brand pepsi = new Brand("Pepsi");

    // Creates the container object "con1" and adds brands to container.
    add(cola);
    add(pepsi);
  }
  public void add(Brand b){
    con1.addToList(b);
    b.setRun(this);
  }

  public Container getContainer() {
    return con1;
  }
}

class Brand {
  // In this class I have a method which needs to accsess the con1 object
// containing all the brands and I need to access the method
  private String name;
  private Run run;

  public Brand(String name){
    this.name = name;

  }
  public void brandMethod() {
    if(getRun().getContainer().methodExample()) {        // Error here. Can't find "con1".**
      System.out.println("Method example returned true.");
    }
  }


  public Run getRun() {
    return run;
  }

  public void setRun(Run run) {
    this.run = run;
  }
}

class Container {
  // This class is a container-list containing all brands brands
  private ArrayList<Object> list = new ArrayList<Object>();

  public boolean methodExample(){
    return false;
  }

  public void addToList(Object o) {
    list.add(o);
  }
}
于 2013-02-14T22:56:58.143 に答える