Dúvida

Olá Pessoal

Alguém sabe me dizer


Object[] sb = l.toArray();

Integer[] sa = new Integer[10];
sa = l.toArray(sa);

porque o Object[] não precisa ser inicializado para usar a função toArray() e o Integer[] precisa?

[]s
Gunnar

O toArray() retorna um Array de Object…acho que seu código não está correto.

List<Integer> a = new ArrayList<Integer>();
        Integer [] b = (Integer[])a.toArray();
        Object [] c = a.toArray();

Vendo esse trecho pequeno que vc colocou, dá pra entender que o problema está na passagem do sa por parâmetro… daí não teria nada a ver com o toArray(), e sim com o fato de vc estar tentando usar a variável sa sem ter sido inicializada.

Se l for alguma coleção cujo tipo genérico seja Integer, vc poderia fazer:

Integer[] sa = l.toArray();

//sem passar argumentos, do mesmo jeito q vc fez:

Object[] sb = l.toArray();

[]'s

o metodo toArray() ele retorna um Object.
Mas entenda o seguinte

Object[] sb = l.toArray();   

vc declaraou uma variavel do tipo Objetct que é um array e esta recebendo os elementos de l que vai retornar um Object.

quando vc usa = está dizendo que aquela variavel vai referencia para algum lugar… ou seja, apontar vamos dizer assim para ver se fica mais facil… e assim vc ja inicializou a variavel.
Agora assim ela nao é inicializada veja.

Object var; //se for declarada dentro de um metodo se for fora(instancia)  recebe null por padrao

espero ter ajudado flw!!

Olá Galera,

Seguinte…

a interface List possui dois métodos toArray().

um toArray() que não recebe parâmetros e retorna um objeto Object[]

dai

Object sb = l.toArray(); //funciona sem inicializar

e o método T[] toArray(T[] t)

Integer[] sa =  new Integer[10]; 
sa = l.toArray(sa); //não funciona sem inicializar sa

sendo l

List<Integer> l = new ArrayList<Integer>();

tentem compilar o seguinte código:

import java.util.*;

public class toArray{

	public static void main(String[] args){
		List<Integer> l = new ArrayList<Integer>();
		for(int i = 0; i < 10; i++) l.add(i);
		Integer[] sa = l.toArray(sa);
		for(int i = 0; i < 10; i++) System.out.println(sa[i]);

	}

}

e depois

import java.util.*;

public class toArray{

	public static void main(String[] args){
		List<Integer> l = new ArrayList<Integer>();
		for(int i = 0; i < 10; i++) l.add(i);
		Object[] sa = l.toArray();
		for(int i = 0; i < 10; i++) System.out.println(sa[i]);

	}

}

[]s
Gunnar

[quote=leofernandesmo]O toArray() retorna um Array de Object…acho que seu código não está correto.

List<Integer> a = new ArrayList<Integer>(); Integer [] b = (Integer[])a.toArray(); Object [] c = a.toArray(); [/quote]

Fiz o código que você citou…dá ClassCastException.

[]s
Gunnar

[quote=RafaelVS]Vendo esse trecho pequeno que vc colocou, dá pra entender que o problema está na passagem do sa por parâmetro… daí não teria nada a ver com o toArray(), e sim com o fato de vc estar tentando usar a variável sa sem ter sido inicializada.

Se l for alguma coleção cujo tipo genérico seja Integer, vc poderia fazer:

Integer[] sa = l.toArray();

//sem passar argumentos, do mesmo jeito q vc fez:

Object[] sb = l.toArray();

[]'s[/quote]

fiz do jeito que você sugeriu…

d:\Text\java\programas\SCJP\src>javac -d ..\class Containers\toArray.java
Containers\toArray.java:10: incompatible types
found   : java.lang.Object[]
required: java.lang.Integer[]
                Integer[] sa = l.toArray();
                                        ^
1 error

É pq o método l.toArray() sem argumentos retornar Object[]. Pra fazer similar, sem precisar instanciar sa, vc pode fazer assim:

Integer[] sa = l.toArray(new Integer[10]);

[]'s

Opa
Valeu :slight_smile:

[]s
Gunnar