Este es un problemilla que me surgió el otro dia al intentar «castear» el Object [] que devuelve una colección.
Observemos el código:
public class TestVectores{
public static void main(String []args){
// JAVA permite que el vobj apunte a un vector que contenga
// elementos de su tipo, o derivados. String deriva de
// Object.
Object [] vobj = new String [] {"uno", "dos", "tres"};
// Conversion valida, vobj esta apuntando a un vector de
// String.
String [] vcads = (String []) vobj;
ArrayList vlists = new ArrayList();
vlists.add("uno");
vlists.add("dos");
vlists.add("tres");
// La conversión de abajo no funciona.
Object [] vList = vlists.toArray();
String [] vcads2 = (String []) vList;
/* vlist.toArray() devuelve un Object [],
* pero este no está apuntando a un String [], sino a un
* Object [] en el que cada posición tiene un String.
*/
// Algo asi internamente..
Object [] miArrayList = new Object [3];
miArrayList[0] = new String("uno");
miArrayList[1] = new String("dos");
miArrayList[2] = new String("tres");
// Por esto la conversión no se puede hacer así
String [] vcads3 = (String []) miArrayList;
// hay que hacerla elemento a elemento
}
}