Re: [Nuiton-utils-devel] [Nuiton-utils-commits] r2613 - trunk/src/main/java/org/nuiton/util/beans
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
On Thu, 12 Dec 2013 16:13:59 +0100 Brendan Le Ny <bleny@codelutin.com> wrote:
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() ?
je voulais faire ça aussi au départ,...
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
Le problème c'est qu'il faut l'object read pour avoir la classe d'implem, donc au pire il faudrait changer la signature de InstanceFactory pour avoir newInstance(O), mais c'est pas très beau non plus... Quand à la duplication de code, je vois pas trop où on doit le faire à part ici. tony. -- Tony Chemit -------------------- tél: +33 (0) 2 40 50 29 28 http://www.codelutin.com email: chemit@codelutin.com twitter: https://twitter.com/tchemit
participants (2)
-
Brendan Le Ny -
Tony Chemit