Java &引用;试图使用不兼容的返回类型;使用接口继承

Java &引用;试图使用不兼容的返回类型;使用接口继承,java,inheritance,interface,Java,Inheritance,Interface,我遇到了一个使用继承的不兼容返回类型的问题 public interface A { } public interface B extends A { } public interface C { Map<String, A> getMapping(); } public interface D extends C { Map<String, B> getMapping(); } 公共接口A{} 公共接口B扩展了{} 公共接口C{ Map getMa

我遇到了一个使用继承的不兼容返回类型的问题

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

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

public interface D extends C {
    Map<String, B> getMapping();
}
公共接口A{}
公共接口B扩展了{}
公共接口C{
Map getMapping();
}
公共接口D扩展了C{
Map getMapping();
}
有没有办法让这一切顺利进行

现在编译器告诉我,我正在接口D上“尝试使用不兼容的返回类型”。

我建议您使用

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

这表示“将
字符串
映射到
A
A
的子类型的映射”。这与
Map

兼容。请进行以下更改:

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

interface D extends C<B> {
    Map<String, B> getMapping();
}
接口C{
Map getMapping();
}
接口D扩展了C{
Map getMapping();
}

@alfasin更正,问题已更新-抱歉!这对你的问题是一个很大的改变@user3707125:那就有你的解决方案了。听起来像是一个答案,伙计们……是的!这让我发疯。我声明了一个接口方法来返回
,并声明了一个实现类集来返回
。这导致了问题中的错误。将接口声明更改为
set非常感谢。这让我抓狂,这是一个非常简单的解决方案。。。。而不是让程序员使用变通方法?