Is it backwards-compatible to replace raw type like Collection with wildcard like Collection<?>? : <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>
