-
Sub-task
-
Resolution: Fixed
-
P3
-
None
The Map.ofEntries() method is currently
static <K, V> Map<K, V> ofEntries(Entry<K, V>... entries)
It should probably be changed to
static <K, V> Map<K, V> ofEntries(Entry<? extends K, ? extends V>... entries)
For most cases it won't make a difference, but for (probably fairly obscure) cases where you already have Map.Entry instances containing subtypes of the desired Map key/value types, it will be helpful. For example:
Map.Entry<Integer, Integer> e1 = entry(1, 2);
Map.Entry<Double, Double> e2 = entry(3.0, 4.0);
Map<Number, Number> map = Map.ofEntries(e1, e2);
The last line gives an error with the non-wildcard signature. This error doesn't occur if wildcards are added.
It doesn't seem to be a problem if the generic types for the Map.Entry instances are inferred. For example, the following works OK:
Map<Number, Number> map2 = Map.ofEntries(entry(1, 2.0), entry(3.0f, 4L));
static <K, V> Map<K, V> ofEntries(Entry<K, V>... entries)
It should probably be changed to
static <K, V> Map<K, V> ofEntries(Entry<? extends K, ? extends V>... entries)
For most cases it won't make a difference, but for (probably fairly obscure) cases where you already have Map.Entry instances containing subtypes of the desired Map key/value types, it will be helpful. For example:
Map.Entry<Integer, Integer> e1 = entry(1, 2);
Map.Entry<Double, Double> e2 = entry(3.0, 4.0);
Map<Number, Number> map = Map.ofEntries(e1, e2);
The last line gives an error with the non-wildcard signature. This error doesn't occur if wildcards are added.
It doesn't seem to be a problem if the generic types for the Map.Entry instances are inferred. For example, the following works OK:
Map<Number, Number> map2 = Map.ofEntries(entry(1, 2.0), entry(3.0f, 4L));