Note that there are some explanatory texts on larger screens.

plurals
  1. POWhy does this override of a generic method work with 1.6, but not 1.7?
    primarykey
    data
    text
    <p>Given the following class, which overrides the getListeners method from AbstractListModel:</p> <pre><code>import java.util.EventListener; import javax.swing.AbstractListModel; public class GenericBug extends AbstractListModel { /** * This is the method of interest * This is the exact same method signature that is present in the base class */ @Override public &lt;T extends EventListener&gt; T[] getListeners(Class&lt;T&gt; listenerType) { // do something useful here... return super.getListeners(listenerType); } // Not important here @Override public int getSize() { return 0; } @Override public Object getElementAt(int index) { return null; } } </code></pre> <p>This class compiles fine using an Oracle 1.6 JDK. Trying the exact same class using an Oracle 1.7 JDK, I get compile errors saying there is a name clash, but the method isn't overridden (but it is!!)</p> <p>Here is the error I get when I use JDK7:</p> <pre><code>% /usr/java/jdk1.7.0/bin/javac GenericBug.java GenericBug.java:10: error: name clash: &lt;T#1&gt;getListeners(Class&lt;T#1&gt;) in GenericBug and &lt;T#2&gt;getListeners(Class&lt;T#2&gt;) in AbstractListModel have the same erasure, yet neither overrides the other public &lt;T extends EventListener&gt; T[] getListeners(Class&lt;T&gt; listenerType) { ^ where T#1,T#2 are type-variables: T#1 extends EventListener declared in method &lt;T#1&gt;getListeners(Class&lt;T#1&gt;) T#2 extends EventListener declared in method &lt;T#2&gt;getListeners(Class&lt;T#2&gt;) GenericBug.java:12: error: incompatible types return super.getListeners(listenerType); ^ required: T[] found: EventListener[] where T is a type-variable: T extends EventListener declared in method &lt;T&gt;getListeners(Class&lt;T&gt;) GenericBug.java:9: error: method does not override or implement a method from a supertype @Override ^ Note: GenericBug.java uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 3 errors </code></pre> <p>Can someone explain to me what is happening? Is this a compiler bug in JDK1.7, or am I missing something?</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload