此代码在 Java 6 下编译良好,但切换到 Java 7 时会导致编译时错误“对 Foo 的引用不明确,com.company.Foo 中的构造函数 <I,C>Foo(C) 和构造函数 <I>Foo (I) 在 com.company.Foo 匹配"
/**
* Constructor A - acts on a Collection of Iterables
*/
public <I extends Iterable<T>, C extends Collection<I>> Foo(C intervalSeries) {
initialize(intervalSeries);
}
/**
* Constructor B - convenience constructor for callers who only have 1 Iterable
*/
public <I extends Iterable<T>> Foo(I intervals) {
List<I> intervalSeries = newArrayList(1);
intervalSeries.add(intervals);
initialize(intervalSeries);
}
我明白为什么(集合是可迭代的)。我计划编写一个 Builder 辅助类,而不是通过提供一个不同名称的构建器方法来解决这个问题,但在此之前我想我会问:没有魔法通配符或超级咒语会让我摆脱这个,对吧?