访问一个类中创建的对象到另一个类

问题描述 投票:0回答:2

我有一个主要课程如下:

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
,这不是预期的。

我怎样才能实现这个目标?

java class object
2个回答
1
投票

假设

Brand
是轻量级对象,而
Run
是重量级对象,那么使用轻量级对象的容器创建一个字段并将其隐藏是一个好主意。

但是

Brand
需要访问它所属的容器,可以通过映射来完成,但我们只是将
Run
注入到
Brand
,所以最好实现
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);
  }
}

0
投票

如果你想获取在 classB 中创建的对象,静态字段应该可以完成这项工作

public class classB {

  public static objectCReference;

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

然后就可以访问A中的参考了

public classA {
  int a = 0.5;

  if (classB.objectCReference != null) { // Make sure to null check 
    classB.objectCReference.methodC(a); 
  }

}

另外请遵循语言约定并以大写字母开头您的班级名称。

© www.soinside.com 2019 - 2024. All rights reserved.