Могу ли я поделиться двумя объектами одного и того же класса, используя пико-контейнер? - PullRequest
0 голосов
/ 04 марта 2019

Могу ли я иметь как

private SharableClass object1;
private SharableClass object2;

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

Затем заполните object1 и object2 и поделитесь им.Это возможно?

Ответы [ 4 ]

0 голосов
/ 07 марта 2019

Вот как я это сделал.

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

Поскольку общее состояние XDTO имеет больше, чем конструктор по умолчанию, пико-контейнер не смог создать конструктор обычным способом.Поэтому мне пришлось создать «класс-оболочку» 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);
}

Вывод будет - test

0 голосов
/ 05 марта 2019

Если вы объявляете private object1 и object2 как в classA, так и в classB, то вы инициализируете эти переменные в классе, который имеет зависимость как classA, так и classB, это может быть picoContainer.Затем вы можете заполнить данные объекта в классе A и использовать эти данные в классе B.Примерно так:

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

}

0 голосов
/ 05 марта 2019

Pico поддерживает внедрение коллекций / массивов, вы можете иметь несколько экземпляров одного и того же типа внутри контейнера, а затем внедрять их как

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

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

, тогда с этими общими объектами легко делать все, что вы хотитеколлекция

0 голосов
/ 04 марта 2019

Если под совместным использованием вы подразумеваете доступ к значениям object1 и object2 в любом месте кода, тогда эти переменные должны быть статическими, если вы имеете в виду, что после инициализации ClassA в вашем коде и если вы хотите получить доступ к object1 и object2, тогдапеременные должны быть открытыми.

Это то, что вы имеете в виду под общим доступом?

Уточнение:

Тогда члены object1 и object2 должны быть статическими, но если вы хотите сохранитьprivate Вы должны объявить эти переменные в абстрактном классе, а 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...