2015-06-16 22 views
10

我遇到了使用继承的不兼容返回类型的问题。“试图使用不兼容的返回类型”与接口继承

public interface A { } 
public interface B extends A { } 

public interface C { 
    Map<String, A> getMapping(); 
} 

public interface D extends C { 
    Map<String, B> getMapping(); 
} 

有没有办法使这项工作?

眼下编译器告诉我,我“尝试使用不兼容的返回类型”的接口D.

+0

@alfasin正确的,问题的更新 - 对不起! – jjNford

+0

这对你的问题有很大的改变。 @ user3707125:然后有你的解决方案。 –

+0

听起来像这里的答案家伙... – vikingsteve

回答

17

我建议你使用

interface C { 
    Map<String, ? extends A> getMapping(); 
} 

这是说“映射String的地图到AA”的子类型。这与Map<String, B>兼容。

+0

是的!这让我疯狂。我有一个声明为返回一个'Set '的接口方法和一个返回'Set '的实现类。这导致了问题中的错误。将接口声明更改为'Set <?扩展MyObjectInterface>'解决了我的问题。谢谢! –

1

做以下修改:

interface C<E extends A> { 
    Map<String, E> getMapping(); 
} 

interface D extends C<B> { 
    Map<String, B> getMapping(); 
}