gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:07:00 26 4
gpt4 key购买 nike

我有以下代码:

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>(...));

}

}

在添加段实例时,我得到一个没有合适的方法...。看来Java的树集并没有应用PECS原则。这个问题有解决办法吗?

解决方案

我实现了:

public static <T> Segment<T> newItem(Period p, T itemValue) {
return new SegmentImpl_v1(p, itemValue);
}

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

最佳答案

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

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

关于Java TreeSet.add() 不遵循 PECS 原则问题(泛型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8016988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com