On 15 October 2013 18:46, Matt Benson <gudnabr...@gmail.com> wrote: > Does that work?
Let's try it? > Seems I recently encountered the types after & having to > be interfaces. Why should that be? Is that documented anywhere? > Matt > > > On Tue, Oct 15, 2013 at 12:31 PM, sebb <seb...@gmail.com> wrote: > >> On 15 October 2013 18:14, Benedikt Ritter <brit...@apache.org> wrote: >> > Hi Oliver, >> > >> > why can't we implement Map<K, V> and make the decorator a generic type >> here? >> >> Also, I believe it is possible to define a generic parameter as >> String, but default to Object as the erased type. >> This would improve the source code checking without compromising >> binary compatibility. >> >> The syntax is something like >> >> Set<Object & String> >> >> > Benedikt >> > >> > >> > 2013/10/14 <ohe...@apache.org> >> > >> >> Author: oheger >> >> Date: Mon Oct 14 20:27:46 2013 >> >> New Revision: 1532068 >> >> >> >> URL: http://svn.apache.org/r1532068 >> >> Log: >> >> Added generics. >> >> >> >> Modified: >> >> >> >> >> commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/DynaBeanMapDecorator.java >> >> >> >> Modified: >> >> >> commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/DynaBeanMapDecorator.java >> >> URL: >> >> >> http://svn.apache.org/viewvc/commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/DynaBeanMapDecorator.java?rev=1532068&r1=1532067&r2=1532068&view=diff >> >> >> >> >> ============================================================================== >> >> --- >> >> >> commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/DynaBeanMapDecorator.java >> >> (original) >> >> +++ >> >> >> commons/proper/beanutils/branches/java5/src/main/java/org/apache/commons/beanutils/DynaBeanMapDecorator.java >> >> Mon Oct 14 20:27:46 2013 >> >> @@ -16,14 +16,13 @@ >> >> */ >> >> package org.apache.commons.beanutils; >> >> >> >> -import java.util.Map; >> >> -import java.util.List; >> >> import java.util.ArrayList; >> >> -import java.util.Set; >> >> -import java.util.HashSet; >> >> -import java.util.Iterator; >> >> import java.util.Collection; >> >> import java.util.Collections; >> >> +import java.util.HashSet; >> >> +import java.util.List; >> >> +import java.util.Map; >> >> +import java.util.Set; >> >> >> >> /** >> >> * <p>Decorates a {@link DynaBean} to provide <code>Map</code> >> >> behaviour.</p> >> >> @@ -66,15 +65,18 @@ import java.util.Collections; >> >> * and <code>values()</code> methods create an >> >> <b><i>unmodifiable</i></b> >> >> * <code>Set</code> and it does not support the Map's >> >> <code>clear()</code> >> >> * and <code>remove()</code> operations.</p> >> >> + * <p>For reasons of backwards compatibility, the generic types of this >> >> + * {@code Map} implementation are {@code <Object, Object>}. However, >> >> the >> >> + * keys of the map are typically strings.</p> >> >> * >> >> * @since BeanUtils 1.8.0 >> >> * @version $Id$ >> >> */ >> >> -public class DynaBeanMapDecorator implements Map { >> >> +public class DynaBeanMapDecorator implements Map<Object, Object> { >> >> >> >> private final DynaBean dynaBean; >> >> private final boolean readOnly; >> >> - private transient Set keySet; >> >> + private transient Set<Object> keySet; >> >> >> >> // ------------------- Constructors >> ---------------------------------- >> >> >> >> @@ -181,9 +183,9 @@ public class DynaBeanMapDecorator implem >> >> * @return An unmodifiable set of the DynaBean >> >> * property name/value pairs >> >> */ >> >> - public Set entrySet() { >> >> + public Set<Map.Entry<Object, Object>> entrySet() { >> >> DynaProperty[] properties = getDynaProperties(); >> >> - Set set = new HashSet(properties.length); >> >> + Set<Map.Entry<Object, Object>> set = new >> >> HashSet<Map.Entry<Object, Object>>(properties.length); >> >> for (int i = 0; i < properties.length; i++) { >> >> String key = properties[i].getName(); >> >> Object value = getDynaBean().get(key); >> >> @@ -225,14 +227,14 @@ public class DynaBeanMapDecorator implem >> >> * @return An unmodifiable set of the {@link DynaBean}s >> >> * property names. >> >> */ >> >> - public Set keySet() { >> >> + public Set<Object> keySet() { >> >> if (keySet != null) { >> >> return keySet; >> >> } >> >> >> >> // Create a Set of the keys >> >> DynaProperty[] properties = getDynaProperties(); >> >> - Set set = new HashSet(properties.length); >> >> + Set<Object> set = new HashSet<Object>(properties.length); >> >> for (int i = 0; i < properties.length; i++) { >> >> set.add(properties[i].getName()); >> >> } >> >> @@ -275,14 +277,12 @@ public class DynaBeanMapDecorator implem >> >> * @throws UnsupportedOperationException if >> >> * <code>isReadOnly()</code> is true. >> >> */ >> >> - public void putAll(Map map) { >> >> + public void putAll(Map<? extends Object, ? extends Object> map) { >> >> if (isReadOnly()) { >> >> throw new UnsupportedOperationException("Map is read >> only"); >> >> } >> >> - Iterator keys = map.keySet().iterator(); >> >> - while (keys.hasNext()) { >> >> - Object key = keys.next(); >> >> - put(key, map.get(key)); >> >> + for (Map.Entry<?, ?> e : map.entrySet()) { >> >> + put(e.getKey(), e.getValue()); >> >> } >> >> } >> >> >> >> @@ -312,9 +312,9 @@ public class DynaBeanMapDecorator implem >> >> * >> >> * @return Unmodifiable collection of values. >> >> */ >> >> - public Collection values() { >> >> + public Collection<Object> values() { >> >> DynaProperty[] properties = getDynaProperties(); >> >> - List values = new ArrayList(properties.length); >> >> + List<Object> values = new ArrayList<Object>(properties.length); >> >> for (int i = 0; i < properties.length; i++) { >> >> String key = properties[i].getName(); >> >> Object value = getDynaBean().get(key); >> >> @@ -361,7 +361,7 @@ public class DynaBeanMapDecorator implem >> >> /** >> >> * Map.Entry implementation. >> >> */ >> >> - private static class MapEntry implements Map.Entry { >> >> + private static class MapEntry implements Map.Entry<Object, Object> >> { >> >> private final Object key; >> >> private final Object value; >> >> MapEntry(Object key, Object value) { >> >> @@ -373,7 +373,7 @@ public class DynaBeanMapDecorator implem >> >> if (!(o instanceof Map.Entry)) { >> >> return false; >> >> } >> >> - Map.Entry e = (Map.Entry)o; >> >> + Map.Entry<?, ?> e = (Map.Entry<?, ?>)o; >> >> return ((key.equals(e.getKey())) && >> >> (value == null ? e.getValue() == null >> >> : value.equals(e.getValue()))); >> >> >> >> >> >> >> > >> > >> > -- >> > http://people.apache.org/~britter/ >> > http://www.systemoutprintln.de/ >> > http://twitter.com/BenediktRitter >> > http://github.com/britter >> >> --------------------------------------------------------------------- >> 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