title: Why does giving explicit type arguments to a non-generic method or constructor compile?
body: <p>When instantiating ArrayLists I am used to seeing code like this</p>
  
  <pre><code>ArrayList&lt;Type&gt; arr = new ArrayList&lt;Type&gt;();
  </code></pre>
  
  <p>or</p>
  
  <pre><code>ArrayList&lt;Type&gt; arr = new ArrayList&lt;&gt;();
  </code></pre>
  
  <p>however today I have come across an instantiation of ArrayList that looks like this:</p>
  
  <pre><code>ArrayList&lt;Type&gt; arr = new &lt;Type&gt;ArrayList();
  </code></pre>
  
  <p>what is going on, and why does that give an "unsafe operations" compile warning?</p>