Cast de Object[] para int[]...como fazer?

8 respostas
D

Como volto de um array de Object para um de int:

int[] l = {1,2,3};
		go(l);
		
	}
	
	static void go(Object...l){
		
	// fazer o cast aqui
		
	}

8 Respostas

D

por que o metodo que passei acima com varargs funciona e com Object[] nao? Sendo que varargs e tratado da mesma forma que Object[].

D

Véio o lance é o senguinte. Não dá pra fazer cast, por que int é primitivo, mas se fosse Integer[] ficaria:

Integer[] l = {1,2,3};  
   go(l);      
}  
   
 static void go(Object...l){  
   Integer[] I = (Integer[])l;
       
 }

Com direito a 1 warning e tudo.

Mas no seu caso é melhor rolar um autoboxing dentro do método e pronto. O cast sai automático sem preocupação por parte do programador

D

Como vou fazer autoboxing sendo que o array passado foi de int[]?

E

Entao Dota, o que acontece ai é o seguinte, como varargs, aceita varios elementos, e como seu array de int[] nao E-UM array de Object[], quando vc passar um array de int[] para o varargs de Object, ele nao atribui diretamente Object... = int[], ele atribui o array de int[] na primeira posição varargs.

static void go(Object...l){
		
		int[] teste = (int[]) l[0];
		
		for(int b : teste){
			System.out.println(b);
		}
		
		System.out.println("Varargs Object");
	}
D

Valeu evertonsilvagomesjava boa resposta

B

deyvid:
Véio o lance é o senguinte. Não dá pra fazer cast, por que int é primitivo, mas se fosse Integer[] ficaria:

Integer[] l = {1,2,3};  
   go(l);      
}  
   
 static void go(Object...l){  
   Integer[] I = (Integer[])l;
       
 }

Com direito a 1 warning e tudo.

Mas no seu caso é melhor rolar um autoboxing dentro do método e pronto. O cast sai automático sem preocupação por parte do programador

Claro que dá!
Todo array é um objeto, sendo assim é possível fazer um cast com (int[]).

O seu exemplo também está correto, já que Integer[] tabém é um objeto do tipo array, mas não há nada de errado em realizar um cast com array de tipos primitivos.

Veja o exemplo do evertonsilvagomesjava

D

Pow, Brunofs mas aí teve que rolar o pulo do gato! Presta atenção:

Isso foi feito pra dar certo

int[] teste = (int[]) l[0];

e não isso

int[] teste = (int[]) l;

Esperimenta, vair ver o que acontecerá.

Um abração

E

deyvid:
Pow, Brunofs mas aí teve que rolar o pulo do gato! Presta atenção:

Isso foi feito pra dar certo

int[] teste = (int[]) l[0];

e não isso

int[] teste = (int[]) l;

Esperimenta, vair ver o que acontecerá.

Um abração

Isso mesmo!

O que acontece nesses casos, é que como String, Integer, Long e os demais objetos herdam de Object a JVM deixa fazer isso: Object[] arrayObject = new String[5].

Como int primitivo nao herda de Object a JVM em tempo de compilação sabe que isso nao da certo: Object[] arrayObject = new int[5].

Mas como um varargs aceita varios elementos, quando aconteceu de passar um arrayInt para um ObjectVarargs, a JVM sabe que não tem como fazer casting de int[] para Object[], então aloca o arrayInt na primeira posição do varargs.

Criado 5 de setembro de 2010
Ultima resposta 6 de set. de 2010
Respostas 8
Participantes 4