Je voudrais utiliser Class.newInstance()
mais la classe que j'instancie n'a pas de constructeur nul. J'ai donc besoin de pouvoir passer des arguments de constructeur. Existe-t-il un moyen de le faire ?
Réponses
Trop de publicités?
Lajos Arpad
Points
5986
Vous pouvez utiliser le getDeclaredConstructor
de la classe. Elle attend un tableau de classes. Voici un exemple testé et fonctionnel :
public static JFrame createJFrame(Class c, String name, Component parentComponent)
{
try
{
JFrame frame = (JFrame)c.getDeclaredConstructor(new Class[] {String.class}).newInstance("name");
if (parentComponent != null)
{
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
else
{
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
frame.setLocationRelativeTo(parentComponent);
frame.pack();
frame.setVisible(true);
}
catch (InstantiationException instantiationException)
{
ExceptionHandler.handleException(instantiationException, parentComponent, Language.messages.get(Language.InstantiationExceptionKey), c.getName());
}
catch(NoSuchMethodException noSuchMethodException)
{
//ExceptionHandler.handleException(noSuchMethodException, parentComponent, Language.NoSuchMethodExceptionKey, "NamedConstructor");
ExceptionHandler.handleException(noSuchMethodException, parentComponent, Language.messages.get(Language.NoSuchMethodExceptionKey), "(Constructor or a JFrame method)");
}
catch (IllegalAccessException illegalAccessException)
{
ExceptionHandler.handleException(illegalAccessException, parentComponent, Language.messages.get(Language.IllegalAccessExceptionKey));
}
catch (InvocationTargetException invocationTargetException)
{
ExceptionHandler.handleException(invocationTargetException, parentComponent, Language.messages.get(Language.InvocationTargetExceptionKey));
}
finally
{
return null;
}
}
Spyros Doulgeridis
Points
131
Je pense que c'est exactement ce que vous voulez http://da2i.univ-lille1.fr/doc/tutorial-java/reflect/object/arg.html
Bien qu'il s'agisse d'un fil de discussion mort, quelqu'un pourrait le trouver utile.
- Réponses précédentes
- Plus de réponses