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
}
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
}
por que o metodo que passei acima com varargs funciona e com Object[] nao? Sendo que varargs e tratado da mesma forma que Object[].
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
Como vou fazer autoboxing sendo que o array passado foi de int[]?
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");
}
Valeu evertonsilvagomesjava boa resposta
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
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
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.