Problemas com parâmetros, refêrencias e métodos de acesso [RESOLVIDO]

Galera tenho o seguinte codigo:

[code]
public class ClasseA {
public ClasseA(int a) {
this.setA(a);
}

public void setA(int a) {
	this.a = a;
}

public int getA() {
	return a;
}

private int a;

}[/code]

import java.util.ArrayList;

public class ClasseB {
	private ArrayList<ClasseA> array = new ArrayList<ClasseA>();

	public void setArray(ArrayList<ClasseA> array) {
		this.array = array;
	}

	public ArrayList<ClasseA> getArray() {
		ArrayList<ClasseA> retorno = new ArrayList<ClasseA>();
		for (int i = 0; i < array.size(); i++) {
			retorno.add(array.get(i));
		}
		return retorno;
	}

}
public class Principal {
	public static void main(String[] args) {
		ClasseB b1 = new ClasseB();
		ClasseB b2 = new ClasseB();

		for (int i = 0; i < 15; i++) {
			b1.getArray().add(new ClasseA(i));
		}
		b2.setArray(b1.getArray());
		for (int i = 0; i < b2.getArray().size(); i++) {
			System.out.println(b2.getArray().get(i).getA());
		}

	}

}

Eu queria que o meu getArray fosse disvinculado do objeto principal, por isso tentei fazer desse jeito, mas nao esta dando certo, alguem sabe como fazer?

Ajuda ae galera…

Cara o problema tá nessa linha:

for (int i = 0; i < 15; i++) { b1.getArray().add(new ClasseA(i)); }

Seu metodo getArray cria uma nova lista toda vez que é chamado, deixando a lista em que vc gostaria de add sempre vazia…

Crie um método getList() que retorne a lista da sua classeB

for (int i = 0; i < 15; i++) { b1.getList().add(new ClasseA(i)); //mudei aqui }

Seu método sera assim:

public ArrayList<ClasseA> getList(){ return array; }

ok?

Isso realmente funciona, mas gera um problema que eu estava tentando fugir desde o começo. Que é a lista que esta no objeto b1 ser a mesma que está no objeto b2. Dessa forma se eu fizer:

[code]
public class ClasseA {
public ClasseA(int a) {
this.setA(a);
}

public void setA(int a) {
	this.a = a;
}

public int getA() {
	return a;
}

private int a;

}[/code]

import java.util.ArrayList;

public class ClasseB {
	private ArrayList<ClasseA> array = new ArrayList<ClasseA>();

	public void setArray(ArrayList<ClasseA> array) {
		this.array = array;
	}

	public ArrayList<ClasseA> getArray() {
		ArrayList<ClasseA> retorno = new ArrayList<ClasseA>();
		for (int i = 0; i < array.size(); i++) {
			retorno.add(array.get(i));
		}
		return retorno;
	}
	public ArrayList<ClasseA> getList(){
		return array;
	}

}
public class Principal {
	public static void main(String[] args) {
		ClasseB b1 = new ClasseB();
		ClasseB b2 = new ClasseB();
		
		for (int i = 0; i < 15; i++) {
			b1.getList().add(new ClasseA(i)); 
		}
		b2.setArray(b1.getArray());
		
		b1.getArray().get(3).setA(8);
		
		System.out.println(b2.getArray().get(3).getA());

	}

}

Eu altero a lista do objeto b1 e a do b2 também é alterada. Como eu me livro dessa dependencia?

Troque:

public void setArray(ArrayList<ClasseA> array) { this.array = array; }

por

[code]public void setArray(ArrayList array) {

	for(ClasseA atual : array){
		this.array.add(new ClasseA(atual.getA()));
	}
	
}[/code]

ok?

Ou assim:

public void setArray(ArrayList<ClasseA> array) {    
    this.array = new ArrayList<ClasseA>(array); // armazena uma cópia, e não o original
} 

Boa marcobiscaro2112, esqueci completamente desse construtor!

Galera vlw msm salvaram minha vida ^^