Foros del Web » Programación para mayores de 30 ;) » Java »

Problema con un casting

Estas en el tema de Problema con un casting en el foro de Java en Foros del Web. Hola, necesito ayuda . Quiero hacer un método para poder redimensionar arrays de objetos, independientemente del tipo que sean. El problema viene cuando al devolver ...
  #1 (permalink)  
Antiguo 05/11/2007, 12:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 16 años, 6 meses
Puntos: 0
Problema con un casting

Hola,

necesito ayuda . Quiero hacer un método para poder redimensionar arrays de objetos, independientemente del tipo que sean. El problema viene cuando al devolver el array trato de hacer un casting para convertirlo a la clase con la que estoy trabajando. Os pongo la parte del código que me está dando problemas.

¿conoce alguien la forma de hacerlo? gracias amigos.


Código:
arrayemp=(Empresa[])me.redimensionaArray(me.altaEmpresa(),arrayemp,1);

.
.
.
.

 Object[] redimensionaArray (Object obj, Object aobj[], int opcion)
    {
             
         if (opcion==1)
        {
            Object aux[]= new Object [aobj.length+1];
        
            for (int x =0; x<aobj.length; x++)
                aux[x]=aobj[x];
        
            aux[aux.length-1]=obj;
        
          
            return aux;
        }
        else
        {
            Object aux[]= new Object [aobj.length-1];
            int cont=0;
            
            for (int x =0; x<aobj.length; x++)
                if (obj != aobj[x])
                {
                   aux[cont]=aobj[x];
                   cont = cont+1;
                }
            
               return aux;
        }
  #2 (permalink)  
Antiguo 06/11/2007, 03:45
 
Fecha de Ingreso: septiembre-2007
Mensajes: 173
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Problema con un casting

Pon la parte del casting, porque aquí no parece haber ningún error. Simplemente creas un array de Object.

Saludos.
  #3 (permalink)  
Antiguo 06/11/2007, 06:05
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Problema con un casting

Un array de Object lleno de objetos de la clase X no es lo mismo que un array de X, y por eso no se puede hacer el casting.

Una solución es crear el nuevo array con la longitud que queramos y usar el metodo arraycopy para pasar los elementos del antiguo al nuevo: http://java.sun.com/j2se/1.4.2/docs/...,%20int,%20int)

Otras soluciones "genericas" implican usar Reflection.

S!
  #4 (permalink)  
Antiguo 06/11/2007, 13:05
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Problema con un casting

Hola,

lo primero, gracias a los dos por responderme.

Ethiel: La primera línea del código que he adjuntado es donde hago el casting. está en el main, y hace una llamada al método de abajo, el redimensionaArray(), pasándole tres parámentros. En el caso que os adjunto, los parámetros que le paso son del tipo Empresa.

GreenEyed: Efectivamente, lo que quiero hacer es algo "genérico", esto es, que le pase el tipo de datos que le pase me redimensione el array (añada o borre del array el dato que le paso), y luego me lo devuelva. Se me ocurren dos fórmulas para hacerlo, seguramente hay más, una es trabajar dentro del método redimensionaArray() con los datos del tipo Object y devolverle un array del tipo Object y hacerle un casting en el lugar desde donde he hecho la llamada, pero ya veo que no funciona. Y dos, que es crearme el array auxiliar del tipo de los datos que le he pasado.
He probado el método arrayCopy, pero por lo que he entendido, mi inglés no es muy bueno, los arrays deberían de ser del mismo tipo,¿no?. Al final sería parecido a mi for...creo

En cuanto a lo del Reflection. La verdad es que estoy empezando a programar, y esto me pilla muy muy lejos. He probado a hacer alguna cosa, p.e.
Class auxi=Class.forName(obj.getClass().getName()); , pero me generan un montón de errores..., que si no reconoce la clase.... que si not statement... en fin.

Lo siento por la chapa, pero es que estoy empezando y necesito orientación. Gracias a los dos por la ayuda.

salu2
  #5 (permalink)  
Antiguo 06/11/2007, 15:47
 
Fecha de Ingreso: septiembre-2007
Mensajes: 173
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Problema con un casting

Creo que pensándolo mejor, te conviene usar una clase que sea redimensione dinámicamente. Usa la clase Vector. Inicialmente da un tamaño de 10, pero se redimensiona solo.
  #6 (permalink)  
Antiguo 07/11/2007, 02:04
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 6 meses
Puntos: 51
Re: Problema con un casting

Cita:
[He probado el método arrayCopy, pero por lo que he entendido, mi inglés no es muy bueno, los arrays deberían de ser del mismo tipo,¿no?. Al final sería parecido a mi for...creo
Sólo tienen que ser del mismo tipo si son arrays de tipos primitivos (int, byte, short, char...) si son de objetos, tienen que ser compatibles, obviamente.

A no ser que sea por un ejercico de ver como se hace, lo mejor como te han dicho sería usar estructuras flexibles para no tener que hacerlo tu manualmente. Afortunadamente Java tiene muchas y muy buenas librerias que resuelven muchos problemas comunes, y este lo es.
Usando List, o Vector si tu JDK es antiguo, ya tienes algo que se agranda o encoge, sin preocuparte de los tipos.

S!
  #7 (permalink)  
Antiguo 08/11/2007, 12:31
 
Fecha de Ingreso: noviembre-2007
Mensajes: 3
Antigüedad: 16 años, 6 meses
Puntos: 0
Sonrisa Re: Problema con un casting

OK. Implica cambiar un poco el planteamiento que tenía, pero al final creo que lo haré con vectores.

Muuuchas gracias a los dos por la ayuda y el tiempo que me habeis dedicado
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:05.