我有以下代码:
public interface Segment<T> extends Period { ... };
public class SegmentImpl_v1<T> implements Segment<T> { ... };
public interface TimeLine<T, S extends Segment<T>> { ... };
public class TimeLineImpl<T, S extends Segment<T>>
implements TimeLine<T, S> {
private SortedSet<S> segments = new TreeSet<S>();
public void someFunction() {
// no suitable method for...
segments.add(new SegmentImpl_v1<T>(...));
}
}当我添加一个段实例时,我得到一个no suitable method for...。Java的树集似乎不适用PECS原则。这个问题有解决办法吗?
溶液
我实施了:
public static <T> Segment<T> newItem(Period p, T itemValue) {
return new SegmentImpl_v1(p, itemValue);
}在SegmentImpl_v1中,并在someFunction()中调用它。
发布于 2011-11-05 02:30:32
果胶与此无关。(您没有任何有界通配符。)
问题是SegmentImpl_v1<T>不是S的一个子类型。当将参数传递给方法时,它必须是已声明的参数类型的子类型。
发布于 2011-11-04 23:59:49
看不出和胸肌的关系。您的麻烦代码没有生成或使用泛型集合。你只是在处理这个问题。集合是S类型,当然您不能将SegmentImpl_v1放入其中。如果有人这么做了呢:
new TimelineImpl<Foo, SegmentImpl_v2<Foo>> 允许SegmentImpl_v1在SortedSet中存在显然是不正确的。
https://stackoverflow.com/questions/8016988
复制相似问题