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

7 respostas
Basilio

Galera tenho o seguinte codigo:

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;

}
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?

7 Respostas

Basilio

Ajuda ae galera…

renamed

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?

Basilio
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:
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;

}
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?
renamed

Troque:

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

por

public void setArray(ArrayList<ClasseA> array) {
		
		for(ClasseA atual : array){
			this.array.add(new ClasseA(atual.getA()));
		}
		
	}

ok?

M

Ou assim:

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

Boa marcobiscaro2112, esqueci completamente desse construtor!

Basilio

Galera vlw msm salvaram minha vida ^^

Criado 13 de dezembro de 2009
Ultima resposta 14 de dez. de 2009
Respostas 7
Participantes 3