Matriz de Object's

2 respostas
Jaba

E aeeew Galera!

Bem, pintou uma duvida bonita aqui. Olhem o código abaixo:

import java.util.*;

public class Teste{
	public static void main(String[] args){
            Integer oi = 5;
            System.out.println(oi.toString());
            ObjTest o = new ObjTest();
	}

}

	class ObjTest {
            public ObjTest(){
                Object[] myObjects = {new String("foo")};
                Arrays.sort(myObjects);
                for(int i =0; i < (myObjects.length); i++) {
                    System.out.print(myObjects[i].toString());
                    System.out.print(" ");
		}
            }

	}

O mesmo Compila. Mas eu quero que vocês prestem atenção no meu oi.toString(). Eu estou invocando o método toString do Wrapper Integer. E funciona.
Agora Observem o Seguinte Código, que é o mesmo acima e eu implementei apenas itens na Matriz:

import java.util.*;

public class Teste{
	public static void main(String[] args){
            Integer oi = 5;
            System.out.println(oi.toString());
            ObjTest o = new ObjTest();
	}

}

	class ObjTest {
            public ObjTest(){
                Object[] myObjects = {new Integer(12),new String("foo")};
                Arrays.sort(myObjects);
                for(int i =0; i < (myObjects.length); i++) {
                    System.out.print(myObjects[i].toString());
                    System.out.print(" ");
		}
            }

	}

Não Compila! Dá ClassCastException.
Eu sei que quando criamos uma Matriz de Objetos, independente do Tipo de Objeto Inserido na mesma, só é retornado o tipo Object dela.
Mas, o Java deixa eu invocar um método do retorno da Matriz se sua classe pai possuir esse método. E mesmo o retorno Object que contem o Tipo Integer, contem toString em sua classe Pai.

Então lá vai a pergunta: Porquê não funciona?

2 Respostas

ivandasilva

ParceroO…

O problema esta acontecendo porque dentro do seu Array tem objetos de classes diferentes e o método sort() da classe java.util.Arrays  ordena um Array onde o método compareTo retorna [b]true[/b], por exemplo:
c1.compareTo(c2) // Terá que retornar true, e com os outros elementos do Array.

Só para avisar, ainda bem que os Wrappers implementam a interface Comparable, senão você teria que implementá-la para poder usar o método sort().

Att.
Ivan

rafaelglauber

Oi,

Isso responde sua dúvida:
http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#sort(java.lang.Object[])

Seu problema é no Array.sort()…você tem elementos que não passam no compareTo().

EDIT: ja respondido acima.

Criado 19 de setembro de 2008
Ultima resposta 19 de set. de 2008
Respostas 2
Participantes 3