Matriz de Object's

E aeeew Galera!

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

[code]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(" ");
	}
        }

}[/code]

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:

[code]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(" ");
	}
        }

}[/code]

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?

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 só 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

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.