“尝试使用不兼容的返回类型”和“接口继承”

时间:2015-06-16 21:14:31

标签: 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();
}

有没有办法让这项工作?

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

2 个答案:

答案 0 :(得分:21)

我建议你使用

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

这表示&#34;将String映射到AA&#34; 的子类型的地图。这与Map<String, B>兼容。

答案 1 :(得分:1)

进行以下更改:

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

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