Java Can';是否包含具有不同参数的相同接口?

Java Can';是否包含具有不同参数的相同接口?,java,generics,Java,Generics,考虑以下示例: public class Sandbox { public interface Listener<T extends JComponent> { public void onEvent(T event); } public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> { } } 没有重叠。那么为什么

考虑以下示例:

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

    public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
    }
}
没有重叠。那么为什么它会失败呢



如果你想知道我在做什么,有更好的解决方案:我有一堆事件和一个监听器接口,它几乎与上面的
Listener
类完全相同。我想创建一个适配器和适配器接口,为此我需要用一个特定事件扩展所有侦听器接口。这可能吗?有更好的方法吗?

不要忘记,在java中,泛型是使用类型errasure实现的,但编译后扩展仍然存在

因此,您要求编译器执行的操作(在类型擦除之后)是

你不能做泛型,也不能不做。不,你不能。 这是因为泛型仅在编译器级别受支持。所以你不能这样想

public interface AnotherInterface {
    public void onEvent(List<JPanel> event);
    public void onEvent(List<JLabel> event);
}
公共接口另一个接口{
公共无效事件(列表事件);
公共无效事件(列表事件);
}
或使用多个参数实现接口

upd

我认为解决办法如下:

public class Sandbox {
//    ....
    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
}
公共类沙箱{
//    ....
公共final类JPanelEventHandler实现侦听器{
另一个接口目标;
JPanelEventHandler(另一个接口目标){this.target=target;}
公开最终作废OneEvent(JPanel事件){
target.onEvent(事件);
}
}
///与JLabel相同
}

我忘记了类型擦除。你知道实现我想要实现的另一种方法吗?
类一实现了两个,三个{}接口另一个{}接口二扩展另一个{}接口三扩展另一个{}
-将一个
对象
更改为任何其他对象,你就会得到错误。所以,这并不是因为它在重复扩展接口,它确实需要专门处理泛型。啊,我忘了类型擦除。你知道有什么替代方法来完成我想做的事情吗?@Stas似乎每个事件都有大量的代码(~50)。也许我应该回到显式地为每个事件创建一个侦听器?@TheLQ,取决于您的应用程序。通常,它可以是匿名类。@Stas我在思考如何将您的类集成到我的设计中时遇到了问题。我还发现,拥有两个子接口来扩展侦听器,然后实现这两个接口是行不通的。我没有主意了here@TheLQ,构造函数中有输入错误-JPanelEventHandler->JPanelEventHandler。
public interface AnotherInterface extends Listener, Listener;
public interface AnotherInterface {
    public void onEvent(List<JPanel> event);
    public void onEvent(List<JLabel> event);
}
public class Sandbox {
//    ....
    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
}