Hi Thomas,

Thomas Neidhart wrote:

> Hi,
> 
> during the vote for collections 4.0 we have discovered a problem wrt the
> MultiMap interface in general and specifically the MultiKeyMap.
> 
> Java 8 introduces a new default method in the Map interface:
> 
>  boolean remove(Object key, Object value)
> 
> This clashes with the method in MultiMap:
> 
>  V remove(K key, V value)
> 
> and the remove methods for multiple keys in MultiKeyMap:
> 
>  V remove(K key1, K key2)
> 
> 
> Just changing the return type does not solve the problem, as one can not
> re-define a method in an interface without using the @Override
> annotation, but this would only work when compiling with JDK 8 and fail
> for other JDKs.


We could introduce a compatibility interface and implement it like

 interface Java8Map {
   public boolean remove(Object key, Object value);
 }

I wonder if it makes any problems for Java 8 though.


> For the MultiKeyMap it would be semantically wrong too, thus I propose a
> name change.


The question is nevertheless, what does that method of Java 8 to 
MultiKeyMap? With Java 8 it simply exists.


> For MultiMap:
> 
>  boolean removeMapping(K key, V value)


If the method will do the same as Java 8 remove, we can stay with "remove" 
assuming the approach from above works.

 
> For MultiKeyMap (for all remove(K ...) methods):
> 
>  V removeMultiKey(K key1, K key2)
>  V removeMultiKey(K key1, K key2, K key3)
>  ...
> 
> 
> In the case of the MultiMap, I think returning a boolean makes more
> sense, similar as Java 8 does it.
> 
> For the MultiKeyMap, returning the previously mapped value is preferable
> imho.


The question is anyway, if we should keep the overloaded method names. Since 
the inherited methods use "MultiKey<? extends K>" as key type in their 
signatures, we might as well introduce new names and provide vararg support, 
something like this:

V putInto(V newVal, K... keys);
V removeFrom(K... keys);
V containsKeys(K... keys);
...

What do you think?

- Jörg


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to