我有两个分别名为Cards
和ActionCard
的类,分别实现ICards
和ICard
,它们分别包含在两个不同的模块中-模块A
包含Cards
和ActionCard
类,并依赖于模块B
,该模块包含ICards
和ICard
接口。
我正在尝试遍历模块Cards
中包含List
的{{1}}的{{1}}类,并遍历模块中的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中的iterator()与java.lang.iterable中的iterator()冲突;尝试使用不兼容的返回类型。
Cards
有什么办法可以实现我的目标?
答案 0 :(得分:1)
怎么样:
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
的{{1}}并在ActionCard
上进行迭代,因此定义它来实现List
是有意义的。 / p>
并且由于ICards<ActionCard>
实现了Cards
(扩展了ICards
),因此您不必明确声明Iterable
实现Cards
。