我有两个分别命名为Cards和ActionCard的类,分别实现ICards和ICard,这两个类包含在两个不同的模块中-模块A包含Cards和ActionCard类,并且取决于模块B,其中包含ICards和ICard接口。我试图遍历模块Cards中包含List的ActionCard的A类,并遍历模块ICards中的B接口。我尝试使用方法Cards将Iterable<ActionCard>类定义为Iterator<ActionCard> iterator(),但是由于模块ActionCard中不知道B,因此我想将ICards定义为Iterable<ICard>,这意味着该方法iterator()中的Cards无法返回Iterator<ActionCard>,因为它是与Iterator<ICard>完全不同的类型(并且我不想在模块ICard中更改为A,因为我需要使用)。我尝试使用通配符在ActionCard类中定义Iterable<? extends ICard>,但出现错误:  预期没有通配符当我尝试在该类中定义方法Cards时,出现错误:  Cards中的iterator()与java.lang.iterable中的iterator()冲突;尝试使用不兼容的返回类型。//Module A:public class Cards implements ICards, Iterable<? extends ICard> { private List<ActionCard> m_Cards = new ArrayList<>(); @Override public Iterator<? extends ICard> iterator(){ return m_Cards.iterator(); }}public class ActionCard implements ICard { //...some methods}//Module B:public interface ICards extends Iterable<? extends ICard> { //...some methods}public interface ICard { //...some methods}有什么办法可以实现我的目标? (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 怎么样:public interface ICards<T> extends Iterable<T> { // ..some methods}和public class Cards implements ICards<ActionCard> { private List<ActionCard> m_Cards = new ArrayList<>(); @Override public Iterator<ActionCard> iterator() { return m_Cards.iterator(); }}由于您的Cards类始终创建List的ActionCard并在List上进行迭代,因此定义它以实现ICards<ActionCard>是有意义的。而且由于Cards实现了ICards(扩展了Iterable),所以您不必明确声明Cards实现Iterable。 (adsbygoogle = window.adsbygoogle || []).push({});
09-05 14:55