是的,变异对逆变和协变的影响是相同的。为了解决这个问题,可以使用Java的边界通配符。这样,可以将泛型类型参数声明为一个包含T的子类型的Iterable,然后将其传递给消费者方法,该方法期望一个Iterable对象,该对象类型为具有U的子类型的。这就可以避免将逆变关系打破。
示例代码如下:
public void consumeIterable(Iterable extends U> iterable) {
for (U u : iterable) {
// process each u element
}
}
public void produceIterable(Iterable iterable) {
// some code here that creates an iterable of T objects
consumeIterable(iterable);
}
上一篇:编译时分配静态数组的宏