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

2022-09-03 05:35:11

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

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上“尝试使用不兼容的返回类型”。


答案 1

我建议你使用

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

这表示“将字符串映射到 AA 的子类型的映射”。这与 兼容。Map<String, B>


答案 2

进行以下更改:

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

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

推荐