我有一个主要课程如下:
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
,这不是预期的。
我怎样才能实现这个目标?
假设
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);
}
}
如果你想获取在 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);
}
}
另外请遵循语言约定并以大写字母开头您的班级名称。