Hey Matt, thanks for the suggestion! I like the idea of having those numbers encapsulated in some sort of data structure. But I don't know if an enum fits the purpose. Maybe I got you wrong. Can you give a code snippet? Defining an enum for float values would require to implement a private float field on that enum and a constructor. For example:
private static enum TransformatioCosts { WRAPPER(0.25f), INTERFACE(0.25f), SUPERCLASS(1.0f), NON_FOUND(1.5f); private final float value; TransformationCosts(float value){ this.value = value; } } Reading out the values would look like: [...] costs += TransformationCosts.WRAPPER.value; [...] I would rather go for an Interface that defines the numbers as constants: private interface TransformationCosts { public static final WRAPPER = 0.25f; public static final INTERFACE = 0.25f; public static final SUPERCLASS = 1.0f; public static final NON_FOUND = 1.5f; } where the call would look like: [...] costs += TransformationCosts.WRAPPER; [...] What do you think? Regards Benedikt ----- Original Message ----- From: gudnabr...@gmail.com To: dev@commons.apache.org Date: 30.01.2012 23:42:06 Subject: Re: [SANDBOX][BeanUtils2] About magic numbers in AccessibleObjectsRegistry.MethodsRegistry.getObjectTransformationCost(Class srcClass, Class destClass)... > If we're just talking about a nice way to deal with these magic > numbers perhaps an enumeration would be a nice way to couple each > number with a mnemonic description of its intended use? Thus multiple > enum members could return the weight 0.25f, for example. > > Matt > > On Mon, Jan 30, 2012 at 4:40 PM, Matt Benson <gudnabr...@gmail.com> wrote: >> On Mon, Jan 30, 2012 at 4:36 PM, Benedikt Ritter >> <b...@systemoutprintln.de> wrote: >>> Am 30.01.2012 23:21, schrieb Matt Benson: >>> >>>> Guys, if I know which magic numbers you are discussing, I believe they >>>> are intended to allow a "weight" to be assigned to the action of >>>> calling a given method(or constructor) with a given set of parameters: >>>> the smaller the weight, the more directly assignable the parameters >>>> are to the method being tested. We can thus determine, among several >>>> potential matching signatures, which matches the most closely and >>>> therefore which we expect the compiler would have decided was meant by >>>> an equivalent call made from actual source code. My apologies if I've >>>> completely missed the point of the discussion as I've only been >>>> following loosely. >>> >>> >>> Hey Matt, >>> >>> that's exactly what we were talking about! Thank you very much. Do you know >>> where the penalties that make up the "weights" come from? >> >> I don't know exactly. I would imagine that they were just made up as >> a set of numbers that would behave in the way the original contributor >> wanted. Perusing the JLS might bear fruit (but then again it might >> not). :) >> >> Matt >> >>> Looking at >>> BeanUtils1 MethodUtils.getObjectTransformationCost() I can see that: >>> * having to wrap a primitive costs 0.25f >>> * having an interface match costs 0.25f >>> * having to go one step higher in the class hierarchy costs 1.0f >>> * having no match in the complete hierarchy costs 1.5f >>> Are those values extracted from the java spec/the java compiler itself? >>> Having that information documented in the code would be off great value, if >>> for what ever reason the implementation has to change some day. >>> >>> good night, >>> Benedikt >>> >>> >>>> >>>> HTH, >>>> Matt >>>> >>>> On Mon, Jan 30, 2012 at 4:14 PM, Benedikt Ritter >>>> <b...@systemoutprintln.de> wrote: >>>>> >>>>> Am 30.01.2012 20:50, schrieb Simone Tripodi: >>>>> >>>>>>> Sadly nothing is mentioned about the said magic numbers. So we are at >>>>>>> the >>>>>>> start again. Any ideas, how to handle this issue? :) >>>>>> >>>>>> >>>>>> >>>>>> which issue? is there any weird behavior introduced by the procedure? >>>>>> >>>>> >>>>> No, everything seems to work properly. But I don't understand it and that >>>>> bugs me ;-) >>>>> >>>>> >>>>>> anyway, we don't have any chance to understand where/how they come >>>>>> from, so just extract them as constants, it that has worked from '04 >>>>>> will continue doing it, unless a bug surprisingly comes up. >>>>>> >>>>> >>>>> okay, you will see a patch for that sometime in the next days. >>>>> >>>>> buona notte, >>>>> Benedikt >>>>> >>>>> >>>>>> TIA, >>>>>> -Simo >>>>>> >>>>>> http://people.apache.org/~simonetripodi/ >>>>>> http://simonetripodi.livejournal.com/ >>>>>> http://twitter.com/simonetripodi >>>>>> http://www.99soft.org/ >>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>> >>>>> >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>> >>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org