Retorno de Array

4 respostas
E

Possuo uma classe (Array.java) com operações sobre uma matriz, uma outra classe (Pessoa.java) que é superclasse de Funcionários.java.

A idéia é que Funcionários refere-se a um cadastro, que faz uso da classe Array para armazenar seus dados, que são instância da classe Pessoa.

O problema e dúvida está no recebimento dos dados armazenados em Array. Veja :

public class Funcionarios {

public static void main(String[] args) {

Array cadastro = new Array(10);

cadastro.put(0, new Pessoa(Everton, 37, 1000.00));

Pessoa teste = (Pessoa) cadastro.get(0);

// Array tem o método getData() que retorna o array completo de objetos
// Quis fazer assim :

// Pessoa[] teste1 = (Pessoa[]) cadastro.getData();

// Porém não aceitou. Resultado tive que criar o array de Pessoa e depois
// Atribuir para cada elemento deste array, um elemento retornado de getData()
//
// Existe como fazer o que preciso, que é guardar em uma matriz Pessoa o retorno de
// getData() ? Se não, porque?

Pessoa[] teste2 = new Pessoa[cadastro.getData().length];	
 for (int i = 0; i < teste2.length; i++)
   teste2[i] = (Pessoa) cadastro.get(i);
	   
 System.out.println(teste.getNome());
 System.out.println(teste2[0].getIdade());

}
}

4 Respostas

TedLoprao

Esse seu Array é genérico??? o getData() retorna um array de Object???

Se for isso, vc pode fazer o que a API de Collections faz… o seguinte, adicione o método getData(Object[] array) (nas Collections esse método é o toArray(Object[] o)).
E nele vc preenche o array passado com os valores dentro da sua classe Array…

No caso, se vc passar um array de Pessoa[] por parâmetro, após chamar este método ele estará preenchido com os dados…

Fallow

ps.: não tá muito bem explicado, mas espero q ajude!!!

E

Bem, sua idéia é legal, mas seria então um outro método. Mas será que teria como eu retornar um array completo, da maneira que comentei e forçar o cast ?

Abraço

Everton

M

Everton, se eu captei seu problema podemos resolve-lo usando System.arraycopy

ficaria assim:

Object origem[] = cadastro.getData(); 
Pessoa destino[] = new Pessoa[origem.length];
System.arraycopy(origem, 0, destino, 0, origem.length);

Não sei se era isso que vc precisava mas tá ai… Se for isso mesmo, depois de uma olhada no javadoc do arraycopy.

[]´s
MedioCore

E

Ok, é uma saída também. Mas daí, para não deixar este tipo de responsabilidade para o aplicativo, o mais interessante seria realmente um método que recebesse o array e retornasse ele cheio.

Valeu pessoal

Abraço

Everton

Criado 23 de abril de 2004
Ultima resposta 24 de abr. de 2004
Respostas 4
Participantes 3