I'm not sure I see the benefit, but I'm not always spot-on
when it comes to wildcards in collections...

Does the change mean that you're allowed to pass
a Map<String, String> to this without casting, whereas
before you couldn't?  The common use-cases here all
have a heterogeneous value type (because of "embedded"),
so if I'm understanding this correctly, I don't see the benefit
of this change.

(BTW, I thought that in fact was possible to add elements
to "? super ...", just not "? extends ...".)

-- Adam


On 9/13/07, Simon Lessard <[EMAIL PROTECTED]> wrote:
> Hello,
>
> I would like to do a public API change to Icon's renderIcon method and its
> dependencies. Currently the signature is
>
> abstract public void renderIcon(
>     FacesContext        context,
>     RenderingContext    arc,
>     Map<String, Object> attrs
>     ) throws IOException;
>
> I would like to change that to the following to make it easier to call
> because of non covariance of generic collections.
>
> abstract public void renderIcon(
>      FacesContext        context,
>      RenderingContext    arc,
>      Map<String, ? extends Object> attrs
>      ) throws IOException;
>
> I don't think it'll break anything as it's a generalization of the previous
> signature, meaning all old code should still be able to call the method
> without any change. The only implication is that renderIcon and its
> dependencies will no longer be able to alter the map since it's quite
> impossible to add an element to a collection containing a wildcard. It's not
> in the method contract to alter the attribute map though, so it should not
> be an issue. However, as it's a public API change, I preferred to ask on the
> mailing list in case I oversaw something.
>
>
> Regards,
>
> ~ Simon
>

Reply via email to