Le 12/12/2013 16:03, sbavencoff@users.nuiton.org a écrit :
Author: sbavencoff Date: 2013-12-12 16:03:49 +0100 (Thu, 12 Dec 2013) New Revision: 2613
Url: http://nuiton.org/projects/nuiton-utils/repository/revisions/2613
Log: fixes #2967 : In Deep copy add factory for create a new instance
Modified: trunk/src/main/java/org/nuiton/util/beans/Binder.java =================================================================== --- trunk/src/main/java/org/nuiton/util/beans/Binder.java 2013-12-12 13:12:36 UTC (rev 2612) +++ trunk/src/main/java/org/nuiton/util/beans/Binder.java 2013-12-12 15:03:49 UTC (rev 2613) @@ -555,7 +555,12 @@ protected Object bind(Binder binder, Object read) throws IllegalAccessException, InstantiationException { Object result = null; if (read != null) { - result = read.getClass().newInstance(); + InstanceFactory<O> instanceFactory = binder.model.getInstanceFactory(); + if (instanceFactory == null) { + result = read.getClass().newInstance(); + } else { + result = instanceFactory.newInstance(); + }
Je suis septique sur cette partie-là. Est-ce qu'il ne serait pas judicieux que binder.model.getInstanceFactory() ne retourne jamais null et que par défaut, il retrourne une implémentation qui fasse read.getClass().newInstance() ? Parce que là, on est condamné, à chaque fois qu'on fait getInstanceFactory() a refaire ce traitement :
+ if (instanceFactory == null) { + result = read.getClass().newInstance(); + } else { + result = instanceFactory.newInstance(); + }
On risque d'oublier et en ça fait de la duplication de code. Une autre possibilité serait d'avoir directement model.newInstance(). On pourrait tester à l'intérieur la présence d'une factory définie et, si c'est pas le cas, appelé getClass().newInstance(); On peut aussi faire les deux solutions à la fois :D -- Brendan Le Ny, Code Lutin bleny@codelutin.com (+33) 02 40 50 29 28