I\'ve always been wondering about some weird aspect of Java generics and the use of wildcards. Let\'s say, I have the following API:
public interface X
Not having been involved in writing the JLS, my best guess is simplicity. Imagine silly, yet (syntactically) valid expressions such as (x = new X. Tracking captures of wildcards can get tricky.
I think of capturing wildcards not as boilerplate, but as having done something right. It's a sign that your API is free of type parameters which client code does not need.
Edit: The current behavior is specified in JLS §4.5.2. The x gets capture-converted for each member access -- once for x.set(...) and once for x.get(). The captures are distinct and thus not known to represent the same type.