使用内部接口实现接口

3
我希望实现一个包含内部接口的接口。我在重写setter方法时遇到了问题。 以下是我的问题草稿:
接口层次结构:
public interface A {
    public interface B {}
    public void setBs(List<B> list);
}

实现:

public class AImpl implements A {
    private List<BImpl> listOfBs;
    public static class BImpl implements B {}
    @Override
    public void setBs(... list) { listOfBs = list }
}
< p > setBs(... list) 方法的参数应该是什么类型?List<? extends B> 不能重写超类的方法。


1
方法签名应该保持不变,因此 List<B>,您可以将签名接口更改为 List<? extends B> 以使用 B 的实现。 - fantarama
为什么不将 listOfBs 声明为 private List<B> listOfBslistOfBs.add(new BImpl()) 仍然可以正常工作。 - Mick Mnemonic
好的。谢谢。在我的实际问题中,类A和AImpl位于不同的命名空间中,而BImpl被称为B,这让我感到困惑(以及Eclipse的导入)。 - mystic123
1个回答

1

正如fantarama提到的那样,签名应该是public void setBs(List<B> list)

如果在您的IDE或构建框架中出现错误,请确保您的Java编译器和目标版本设置正确。


仅凭这个更改,就会出现编译器错误:类型不匹配:无法将List<A.B>转换为List<AImpl.BImpl> - Mick Mnemonic
同意,你还需要将变量更改为 private List<B> listOfBs,就像你提到的那样。 - gar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接