2011-01-22 11 views
15

Si tengo 2 clases, "A" y "B", ¿cómo puedo crear una fábrica genérica así que solo tendré que pasar el nombre de la clase como una cadena para recibir una instancia?Creando una instancia de String en Java

Ejemplo:

public static void factory(String name) { 
    // An example of an implmentation I would need, this obviously doesn't work 
     return new name.CreateClass(); 
} 

Gracias!

Joel

+4

va a devolver en 'void' –

Respuesta

18
Class c= Class.forName(className); 
return c.newInstance();//assuming you aren't worried about constructor . 

para invocar el constructor con el argumento

public static Object createObject(Constructor constructor, 
     Object[] arguments) { 

    System.out.println("Constructor: " + constructor.toString()); 
    Object object = null; 

    try { 
     object = constructor.newInstance(arguments); 
     System.out.println("Object: " + object.toString()); 
     return object; 
    } catch (InstantiationException e) { 
     //handle it 
    } catch (IllegalAccessException e) { 
     //handle it 
    } catch (IllegalArgumentException e) { 
     //handle it 
    } catch (InvocationTargetException e) { 
     //handle it 
    } 
    return object; 
    } 
} 

tienen una look

+0

¿Cómo puedo enviar argumentos al constructor? – Joel

+0

actualizado ............ –

+1

'System.out.println (e);' ¡Por favor, NUNCA! ¿Por qué simplemente no declaras la excepción? Cuando * realmente * se siente capaz de manejarlo al informar, use 'e.printStackTrace()'. – maaartinus

4

Usted puede echar un vistazo a Reflection:

import java.awt.Rectangle; 

public class SampleNoArg { 

    public static void main(String[] args) { 
     Rectangle r = (Rectangle) createObject("java.awt.Rectangle"); 
     System.out.println(r.toString()); 
    } 

    static Object createObject(String className) { 
     Object object = null; 
     try { 
      Class classDefinition = Class.forName(className); 
      object = classDefinition.newInstance(); 
     } catch (InstantiationException e) { 
      System.out.println(e); 
     } catch (IllegalAccessException e) { 
      System.out.println(e); 
     } catch (ClassNotFoundException e) { 
      System.out.println(e); 
     } 
     return object; 
    } 
} 
Cuestiones relacionadas