title: Is it backwards-compatible to replace raw type like Collection with wildcard like Collection<?>?
body: <p>I'm the author of a certain open-source library. One of the public interfaces has methods which use raw types like <code>Collection</code>, for instance:</p>
  
  <pre><code>public StringBuilder append(..., Collection value);
  </code></pre>
  
  <p>I get <code>Collection is a raw type. References to generic type Collection&lt;E&gt; should be parameterized</code> warnings.</p>
  
  <p>I'm thinking about fixing these warnings. Implementations actually don't care about the types of the elements in collections. So I was thinking about replacing <code>Collection&lt;?&gt;</code>.</p>
  
  <p>However, these methods are parts of public interface of my library. Client code may call these methods or provide own implementations of these public interfaces thus implementing these methods. I am afraid that changing <code>Collection</code> to <code>Collection&lt;?&gt;</code> will break client code. So here is my question.</p>
  
  <p>If I change <code>Collection</code> -> <code>Collection&lt;?&gt;</code> in my public interfaces, may this lead to:</p>
  
  <ul>
  <li>compilation errors in the client code?</li>
  <li>runtime errors in the already compiled existing client code?</li>
  </ul>