为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

ABOUTYOU 2022-07-20 09:55:04
我可以喜欢吗private SharableClass object1;private SharableClass object2;public ClassA(SharableClass object1, SharableClass object2){    this.object1=object1;    this.object2=object2;}然后填充object1和object2并共享。那可能吗?
查看完整描述

4 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

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


public class classC{

 private SharableObject object1;

 private SharableObject object2;


 public classC(){

  //initiliaze objects

  object1 = new SharableObject();

  object2 = new SharableObject();

 }


 private classA aClass = new classA(object1, object2);

 private classB bClass = new classB(object1, object2);


//since they refer same objects you can get data from classB when you change data from classA

}


查看完整回答
反对 回复 2022-07-20
?
DIEA

TA贡献1820条经验 获得超2个赞

我就是这样做的。


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 xDTOs;


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);

}

输出将是 - 测试


查看完整回答
反对 回复 2022-07-20
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

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


public ClassA(List<SharableClass> objects){

  this.objects = objects;

}


public ClassB(List<SharableClass> objects){

  this.objects = objects;

}

然后很容易对集合中的那些共享对象做任何你想做的事情


查看完整回答
反对 回复 2022-07-20
?
慕斯709654

TA贡献1840条经验 获得超5个赞

如果通过共享意味着访问代码中任何位置的 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)

}


查看完整回答
反对 回复 2022-07-20
  • 4 回答
  • 0 关注
  • 124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信