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

ayuda con creación de instancias...

Estas en el tema de ayuda con creación de instancias... en el foro de Java en Foros del Web. hola, mi problema es el siguente, resulta que necesito crear instancias de objetos que no son conocidos en tiempo de ejecución a través de sus ...
  #1 (permalink)  
Antiguo 31/01/2005, 10:34
 
Fecha de Ingreso: noviembre-2004
Ubicación: Concepción
Mensajes: 14
Antigüedad: 20 años
Puntos: 0
ayuda con creación de instancias...

hola, mi problema es el siguente, resulta que necesito crear instancias de objetos que no son conocidos en tiempo de ejecución a través de sus constructores (todo esto con ayuda del package java.lang.reflect.*)
El problema en si es que no puedo crear instancias de constructores que tengan como argumento un int[] (pero si puedo si es un String[], char[], etc)

dejo el código de dos clases para ver si alguien me puede ayudar

public class AlgorithmModel {

public AlgorithmModel(int numLines) {
System.out.println("load Constructor with int arguments...");
System.out.println("numLines = " + numLines);
}

public AlgorithmModel(String[] arrayString) {
System.out.println("load Constructor with String[] arguments...");
for(int i = 0; i < arrayString.length; i++)
System.out.println("arrayString[" + i + "] = " + arrayString[i]);
}

public AlgorithmModel(int[] arrayInt) {
System.out.println("load Constructor with int[] arguments...");
for(int i = 0; i < arrayInt.length; i++)
System.out.println("arrayInt[" + i + "] = " + arrayInt[i]);
}

}


Esta clase lo unico que hace es servir de conejillo de indias para probar la creacion de distintas instancias.

import java.lang.reflect.*;

class SampleConstructor {

public static void main(String[] argss) {
AlgorithmModel model;
Class AlgorithmModelDefinition;
Class[] argsClass = new Class[] {};
Object[] args = new Object[] {};
Constructor argsConstructor;

argsClass = new Class[] { int.class };
Integer numLines = new Integer(24);
args = new Object[] { numLines };

try {
AlgorithmModelDefinition = Class.forName("AlgorithmModel");
argsConstructor = AlgorithmModelDefinition.getConstructor(argsClass) ;
model = (AlgorithmModel) createObject(argsConstructor, args);
} catch (ClassNotFoundException e) {
System.out.println(e);
} catch (NoSuchMethodException e) {
System.out.println(e);
}

System.out.println("\n");
argsClass = new Class[] { String[].class };
String[] arrayString = new String[] { new String("Hello") , new String("World") };
args = new Object[] { arrayString };

try {
AlgorithmModelDefinition = Class.forName("AlgorithmModel");
argsConstructor = AlgorithmModelDefinition.getConstructor(argsClass) ;
model = (AlgorithmModel) createObject(argsConstructor, args);
} catch (ClassNotFoundException e) {
System.out.println(e);
} catch (NoSuchMethodException e) {
System.out.println(e);
}

System.out.println("\n");
argsClass = new Class[] { int[].class };
Integer[] arrayInt = new Integer[] { new Integer(12) , new Integer(25) };
args = new Object[] { arrayInt };

try {
AlgorithmModelDefinition = Class.forName("AlgorithmModel");
argsConstructor = AlgorithmModelDefinition.getConstructor(argsClass) ;
model = (AlgorithmModel) createObject(argsConstructor, args);
} catch (ClassNotFoundException e) {
System.out.println(e);
} catch (NoSuchMethodException e) {
System.out.println(e);
}

}

public static Object createObject(Constructor constructor, Object[] arguments) {
System.out.println ("Constructor: " + constructor.toString());
Object object = null;
try {
object = constructor.newInstance(arguments);
return object;
} catch (InstantiationException e) {
System.out.println(e);
} catch (IllegalAccessException e) {
System.out.println(e);
} catch (IllegalArgumentException e) {
System.out.println(e);
} catch (InvocationTargetException e) {
System.out.println(e);
}
return object;
}
}


Esta clase es la que crea una instancia por cada constructor de la clase anterior.
Al ejecutar el programa, funciona tofo ok, hasta la creación de la instancia con int[]

Constructor: public AlgorithmModel()
load Constructor with null arguments...

Constructor: public AlgorithmModel(java.lang.String,boolean)
load Constructor with String and boolean arguments...
name = Testing load class...
flag = true

Constructor: public AlgorithmModel(int)
load Constructor with int arguments...
numLines = 24

Constructor: public AlgorithmModel(java.lang.String[])
load Constructor with String[] arguments...
arrayString[0] = Hello
arrayString[1] = World

Constructor: public AlgorithmModel(int[])
java.lang.IllegalArgumentException: argument type mismatch

Lo extraño que encuentro es que me reconoce bien el constructor, pero los argumentos que les paso no.

Si alguien me puede ayudar, gracias de antemano.

Última edición por MarriverX; 31/01/2005 a las 13:09
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 13:46.