首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java的TreeSet.add()不遵循PECS原则问题(泛型)

Java的TreeSet.add()不遵循PECS原则问题(泛型)
EN

Stack Overflow用户
提问于 2011-11-04 23:39:54
回答 2查看 157关注 0票数 0

我有以下代码:

代码语言:javascript
复制
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原则。这个问题有解决办法吗?

溶液

我实施了:

代码语言:javascript
复制
public static <T> Segment<T> newItem(Period p, T itemValue) {
    return new SegmentImpl_v1(p, itemValue);
}

SegmentImpl_v1中,并在someFunction()中调用它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-05 02:30:32

果胶与此无关。(您没有任何有界通配符。)

问题是SegmentImpl_v1<T>不是S的一个子类型。当将参数传递给方法时,它必须是已声明的参数类型的子类型。

票数 1
EN

Stack Overflow用户

发布于 2011-11-04 23:59:49

看不出和胸肌的关系。您的麻烦代码没有生成或使用泛型集合。你只是在处理这个问题。集合是S类型,当然您不能将SegmentImpl_v1放入其中。如果有人这么做了呢:

代码语言:javascript
复制
new TimelineImpl<Foo, SegmentImpl_v2<Foo>>  

允许SegmentImpl_v1在SortedSet中存在显然是不正确的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8016988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档