考虑以下示例:
public class Sandbox {
public interface Listener<T extends JComponent> {
public void onEvent(T event);
}
public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
}
}
失败并出现以下错误
/media/PQ-WDFILES/programming/Sandbox/src/Sandbox.java:20: Sandbox.Listener cannot be inherited with different arguments: <javax.swing.JPanel> and <javax.swing.JLabel>
public interface AnotherInterface extends Listener<JPanel>, Listener<JLabel> {
^
1 error
为什么呢 生成的方法没有重叠。事实上,这实际上意味着
public interface AnotherInterface {
public void onEvent(JPanel event);
public void onEvent(JLabel event);
}
那里没有重叠。那为什么会失败呢?
如果您想知道我在做什么,并且有更好的解决方案:我有一堆Event和Listener接口,它们几乎与上述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
}
问题内容: 假设我有一个域类: 其中Animal是具有不同实现(Cat,Dog)的接口。假设我希望能够保存Zoo对象: 我想发送一个json-类似: 我如何告诉Spring MVC在type ==’Cat’时将动物映射到Cat类型,在type ==’Dog’时将其映射到Dog类? 问题答案: 您应该使用Jackson注释并实现多态json。注释在基类上。
假设我有一个域类: 其中动物是具有不同实现的接口(猫、狗)。假设我希望能够保存一个动物园对象:
问题内容: 假设我有一个域类: 其中Animal是具有不同实现(Cat,Dog)的接口。假设我希望能够保存Zoo对象: 我想发送一个json-类似: 我如何告诉Spring MVC在type ==’Cat’时将动物映射到Cat类型,并在type ==’Dog’时将其映射到Dog类? 问题答案: 你应该使用Jackson注释并实现多态json。注释在基类上。
B类: 如何影响这个界面?
问题内容: 为什么将两个使用相同方法的命名接口视为不同的接口,又如何避免呢? 假设我们有一个喜欢吃产品的人(食者)。他不在乎产品是什么,他只想指出从哪里可以买到新产品。换句话说,他想要产品服务,但并不关心产品服务将生产什么产品。在具体的实现中,我们将尝试用苹果喂他,因此我们将为他提供appleService。 结果如下: 接口和具有相同的方法,除了golang之外,别无其他。为什么以及如何避免这种
...NestedServletException:请求处理失败;嵌套异常是java.lang.IllegalStateException:映射到HTTP路径的处理程序方法不明确...