Java – can’t contain the same interface as different parameters?

Consider the following example:

public class Sand@R_886_2419@ {
    public interface Listener<T extends JComponent> {
        public void onEvent(T event);
    }

    public interface AnotherInterface extends Listener<JPanel>,Listener<JLabel> {
    }
}

This will fail with the following error

/media/PQ-WDFILES/programming/Sand@R_886_2419@/src/Sand@R_886_2419@.java:20: Sand@R_886_2419@.Listener cannot be inherited with different arguments: <javax.swing.JPanel> and <javax.swing.JLabel>
        public interface AnotherInterface extends Listener<JPanel>,Listener<JLabel> {
               ^
1 error

Why? The generated methods do not overlap In fact, this basically means

public interface AnotherInterface {
    public void onEvent(JPanel event);
    public void onEvent(JLabel event);
}

No overlap Then why did it fail?

If you want to know what I'm doing and have a better solution: I have a bunch of events and a listener interface, almost exactly like the listener class above I want to create an adapter and adapter interface, so I need to extend all listener interfaces with a specific event Is that possible? Is there a better way to do this?

Solution

No, you can't

public interface AnotherInterface {
    public void onEvent(List<JPanel> event);
    public void onEvent(List<JLabel> event);
}

Or implement the interface with several parameters

UPD

I think the solution will be as follows:

public class Sand@R_886_2419@ {
//    ....
    public final class JPanelEventHandler implements Listener<JPanel> {
        AnotherInterface target;
        JPanelEventHandler(AnotherInterface target){this.target = target;}
        public final void onEvent(JPanel event){
             target.onEvent(event);
        }
    }
///same with JLabel
}
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>