Converter tipo

4 respostas
sarkozy

fala ae,

pessoal, eu tenho que fazer uma classe que se chama “Modelo” e outras duas classes filhas dela que são: “ModeloTipoA” e “ModeloTipoB”.

e dentro de outra classe eu tenho um array da classe Modelo: Modelo modelos [] = new Modelo [100];

ae eu tenho que ter um metodo que busca uma propriedade que é exclusiva dos moodelos do tipo A… sendo que na classe Modelo tem o metodo isTipoA() e isTipoB() para eu verificar qual é qual…

entao eu to pensando em fazer algo desse tipo:

public void getTipoA (String propriedadeModelosA[])
    {
           int n = this.modelos.length;
           int j = 0;
           for (int i=0;i<n;i++)
           {
               if (modelos[i].isTipoA())
               {
                    // esse modelos[i] é do tipo Modelo, que eh a classe mae da classe ModeloTipoA
                    ModeloTipoA modelo = (ModeloTipoA) modelos[i]; 

                    // o metodo getPropriedade()  existe dentro da classe ModeloTipoA
                    propriedadeModelosTipoA[j] = modelo.getPropriedade();
                    j++;
               }
           }

    }

minha duvida eh:

quando eu faço a conversao de tipo: ModeloTipoA modelo = (ModeloTipoA) modelos[i]; , as propriedades que sao exclusivas da classe ModeloTipoA ficam diponiveis nesse objeto modelo ou quando eu jogo o objeto da classe ModeloTipoA num array do tipo Modelo ela perde as caracteristicas de classe filha?

deu pra entender?

eu queria saber se isso funcionaria…

vlw

4 Respostas

g4j

Continuam sim cara. Faça um teste aí pra comprovar!

JESUSKLEITON

Um objeto de determinada classe continua pertencendo a essa classe… esse fato não mudou, afinal, você pode inserir esse objeto no vetor de modelos porque o ModeloTipoA nunca deixou de ser um modelo…

abraço.

M

Note que não é preciso de um atributo para identificar se o objeto é de determinada classe. O operador instanceof já faz isso:

String a = "adas";
if (a instanceof Integer) {
    // isso é mentira
} else if (a instanceof String) {
   // é verdade
}

Outra coisa: receber um vetor de Strings como argumento é perigoso pois você simplesmente não sabe quantas posições há naquele vetor (e simplesmente ir colocando coisas lá acreditando que caberá tudo pode gerar um ArrayIndexOutOfBoundsException).

Sugiro que faça algo assim:

public String[] getTipoA () {
	List<String> propriedades = new ArrayList<String>();
	for (Modelo m : modelos) {
		if (m instanceof ModeloTipoA) {
			ModeloTipoA modelo = (ModeloTipoA) m; 
			propriedades.add(modelo.getPropriedade());
		}
	}
	return propriedades.toArray(new String[0]);
}
sarkozy

fala ae pessoal,

mto obrigado pelas respostas e pelas dicas!

vlw

Criado 5 de março de 2010
Ultima resposta 5 de mar. de 2010
Respostas 4
Participantes 4