繁体   English   中英

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

[英]"Attempting to use an incompatible return type" with Interface Inheritance

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

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

我建议你用

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

这是说“那Maps的地图StringA或一个亚型的A ”。 这与Map<String, B>兼容。

进行以下更改:

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

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

作为已接受答案的补充,我在使用嵌套类型数据结构时遇到了问题。 例如,如果您在接口中创建一个抽象方法,例如:

Collection<Collection<? extends InterfaceB>> doSomething();

那么接受的答案将意味着这应该有效:

@Override
Collection<Collection<InterfaceBImplementation>> doSomething() {

... doing stuff...

return stuff;
}

但是,您将收到相同的冲突/不兼容的返回类型错误。 相反,您还必须在抽象方法中通配内部集合:

Collection<? Collection<? extends InterfaceB>> doSomething();

我不明白为什么这行得通,或者为什么它是这样设置的,但是你去吧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM