我可以使用pico容器共享同一类的两个对象吗?

时间:2019-03-04 15:51:04

标签: java rest cucumber picocontainer

我可以喜欢

private SharableClass object1;
private SharableClass object2;

public ClassA(SharableClass object1, SharableClass object2){
    this.object1=object1;
    this.object2=object2;
}

然后填充object1和object2并共享它。有可能吗?

4 个答案:

答案 0 :(得分:0)

如果通过共享表示要访问代码中任何位置的object1和object2的值,则这些变量应该是静态的,如果您的意思是一旦在代码中初始化了ClassA并且想要访问object1和object2,则变量应该是公共的。

这就是分享吗?

说明:

然后,成员object1和object2必须是静态的,但是如果要保持私有,则应在抽象类中声明这些变量,并且ClassA和ClassB继承该类。

public abstract class ClassAB{
    protected SharableClass object1;
    protected SharableClass object2;
}

public class ClassA extends ClassAB{
    //Change object1 and object2 (changes are applied in all ClassAB)
}

public class ClassB extends ClassAB{
    //Change object1 and object2 (changes are applied in all ClassAB)
}

答案 1 :(得分:0)

如果您在classA和classB中都声明了私有object1和object2,则将这些变量初始化为同时具有classA和classB依赖关系的类,可能是picoContainer。然后,您可以在classA中填充对象数据,并在classB中使用该数据。如下所示:

<string name="registration_success">You have been successfully registered 
                  and your number is: \n\n%1$s</string>

}

答案 2 :(得分:0)

Pico支持集合/数组注入,您可以在容器内具有多个相同类型的实例,然后像注入

public ClassA(List<SharableClass> objects){
  this.objects = objects;
}

public ClassB(List<SharableClass> objects){
  this.objects = objects;
}

然后,您可以轻松地对集合中的那些共享对象进行任何操作

答案 3 :(得分:0)

这就是我的方法。

xDTO{
String xName;
void setxName(String name){ xName = name;}
String getxName(){ return xName;}
public xDTO(){
}
publicxDTO(String name){
this.xName=name;
}

由于共享状态XDTO的默认构造函数超过了默认构造函数, pico容器无法以通常的方式创建构造函数。 所以我不得不创建一个“包装类”     xDTOShare {     ArrayList xDTO;

public void addToxDTO(XDTO dto){
xDTO xdto1 = new xDTO();
xdto1.setxName(dto.name);
xDTOs.add(xdto1);
}

classA{
private ArrayList<xDTO> dtos;
public classA(ArrayList<xDTO> dtos){
this.dtos = dtos;
dtos.set(new XDTO("test"));
}
classB{
private ArrayList<xDTO> dtos;
public classB(ArrayList<xDTO> dtos){
this.dtos = dtos;
System.out.println(dtos.getXName);
}

输出将为-测试