On 10 August 2010 10:42, Julien Aymé <julien.a...@gmail.com> wrote: > 2010/8/10 sebb <seb...@gmail.com>: >> On 9 August 2010 23:44, James Carman <ja...@carmanconsulting.com> wrote: >>> On Mon, Aug 9, 2010 at 7:32 AM, sebb <seb...@gmail.com> wrote: >>>> Why not split the code into two methods: >>>> >>>> public static <K,V> Map<K, V> toMap(Map.Entry<K,V>[] array) >>>> and >>>> public static <K,V> Map<K, V> toMap(Class<K> keyType, Class<V> >>>> valueType, Object[][] array) >>>> >>> >>> So, what would that make the "user" code look like? The whole reason >>> for this, unless I'm mistaken, was to make it easy to do stuff like: >>> >>> public static final Map<String,Color> COLOR_MAP = ArrayUtils.toMap(new >>> Object[][] { >>> { "red", Color.red }, >>> { "blue", Color.blue } >>> } ); >>> >>> To me, we're really trying to make it easier to use this API, right? >>> So, now the code would look like: >>> >>> public static final Map<String,Color> COLOR_MAP = >>> ArrayUtils.toMap(String.class, Color.class, new Object[][] { >>> { "red", Color.red }, >>> { "blue", Color.blue } >>> } ); >>> >> >> Looks OK to me, and solves the type-safety problem. >> >>> This is one of the big gripes about how generics are handled in Java, >>> you have to repeat yourself so darn much. What if we told folks to >>> use a new MapBuilder instead? >>> >>> public static final Map<String,Color> COLOR_MAP = >>> MapUtils.builder().put("red", Color.red).put("blue", >>> Color.blue).toMap(); >>> >>> It seems like this "builder" stuff is getting popular these days. >>> What do you guys think? >> >> AFAICT, that does not ensure type-safety, so is no better than the current >> API. >> > > The builder can ensure type-safety, if the builder itself is generic:
Of course, but the user code will be more verbose. > MapBuilder<K, V>, with methods: > - void put(K key, V value) > - Map<K, V> toMap() > > and MapUtils method is: > public static <K, V> MapBuilder<K, V> builder(); > > (And the MapBuilder looks awfully a lot like Map ;-) ) But what would the code look like? Would it be any neater than: public static final Map<String,Color> COLOR_MAP = ArrayUtils.toMap(String.class, Color.class, new Object[][] { { "red", Color.red }, { "blue", Color.blue } } ); I suspect not. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org