Questao TestKiller - ClassCastException ou Erro de Compilacao?

9 respostas
Thiago_da_Santa

Oi Galera Guj,

Estou estudando para certificao e fazendo uns monck’s, no TESTKILLER - QUESTAO 11:

public class test {
	
	 public static void main(String[] args){
		    
		  Object [] myObjects = {
				  new Integer(12),
				  new String("foo"),
				  new Integer(5),
				  new Boolean(true)
		  };
		  
	linha 29	  Arrays.sort(myObjects);
		
		  for (int i = 0 ; i<myObjects.length;i++){
			  System.out.println(myObjects[i].toString());
			  System.out.print(" ");
		  }
	 	}

}

A. Compilation fails due to an error in line 23
B. Compilation fails due to an error in line 29
C. A ClassCastException occurs in line 29
D. A ClassCastException occurs in line 31
E. The Value of all four prints in natural order

sei que nao pode usar sort() com valores boolean no array e que os elementos do array devem ser mutualmente comparaveis,porem minha duvida é:

PQ A RESP É A LETRA C e NÃO É A LETRA B!
eu marquei B porem o gab da como resp a letra C!

HELP ME PLEASE!!!

Abracos e muito obrigado

9 Respostas

D

Vc não pode ordenar um array de objetos de tipo diferentes, eles tem que ser “comparáveis” entre si.

sergiolopes

voce pode usar sort com Boolean sim, desde que seja tudo Boolean (o que nao eh o caso).

veja o javadoc do metodo sort:

http://java.sun.com/javase/6/docs/api/java/util/Arrays.html#sort(java.lang.Object[])

lá ele fala que lanca ClassCastException se os elementos nao forem mutuamente comparaveis

_

Creio que é a letra ‘C’ por que você está utilizando um array de Objetc, não teria como o compilador saber que dentro do seu array existem tipos incompatíveis para o método sort(), logo o erro vai ocorrer em tempo de execução. Por isso a ClassCastException é lançada na linha em que o método sort() é chamado.

aurelio_silva

A resposta não é a letra B porque em tempo de compilação não dá pra saber o que vai ter dentro do array de Object myObjects, então vai compilar numa boa e só vai aparecer o problema em tempo de execução, lançando a exceção.

Até.

pintofree

E a letra C tmb pq em tempo de execução ele tenta converter os objetos para um tipo mutuamente comparavel o que gera exceção

alarangeiras

Olá Thiago

Seguinte, não acontece um erro de compilação pois para o compilador a referência é de um object e supostamente o que há no array são objetos da classe object (pelo menos para o compilador é assim) nós (programadores) assumimos o risco de atribuir um objeto polimorficamente.
A compilação é efetuada tranquilamente, porém em tempo de execução o método sort da Classe Array se utiliza do método compareTo (anteriormente definido em cada classe) para ordenar os objetos. Porém possuimos alguns objetos que não são mutuamente comparáveis, como os dois primeiros Integer e String.
A exceção ClassCastException acontece justamente no método compareTo da wrapper Integer (se não me engano, me corrijam se estiver errado, por favor) quando a mesma tenta comparar o Integer à String.
Quando tiver dúvidas deste tipo você pode usar o eclipse com o exemplo e analisar o rastreamente da pilha (foi o que fiz.). Ou se prefirir postar, é informação agregada… :smiley:

Espero ter ajudado,
Abraços para todos.

Thiago_da_Santa

Valeu galera do GUJ pela ajuda…

p.s Sergio, nao é possivel usar sort() em array de BOOLEAN nao, eu testei no eclipse e no netbeans e no monck do Iquisitation(diz que tb n é possivel sort() em array de boolean)

sergiolopes

thiago, array de boolean não, mas array de Boolean como eu disse, sim. cuidado pra não confundir os dois.

Boolean[] b = {Boolean.TRUE, Boolean.FALSE, Boolean.TRUE};
Arrays.sort(b);
Thiago_da_Santa

Opa…

Valeu mesmo Sergio…
Uma pequena diferença muda tudo… não estava atento a isto!

Valeu mesmo… Brigadão

Criado 28 de outubro de 2008
Ultima resposta 3 de nov. de 2008
Respostas 9
Participantes 7