我正在构建一个频率表实现,其中hashmap表元素是链式树集。键/值对类具有类定义,如下所示:
public class CountablePair<F, S extends Comparable<? super S>> implements Comparable<S> {
我希望创建一个实现Map.Entry的新类EntryTreeSet,并在其中包含CountablePairs的树集。我当前的类声明代码,它的treeset变量及其构造函数如下:
public class EntryTreeSet<F,S> implements Map.Entry<F,S> {
private TreeSet<CountablePair<F,S>> tree;
public EntryTreeSet() {
this.tree = new TreeSet<CountablePair<F,S>>();
}
但是,这会产生以下错误陈述:
EntryTreeSet.java:19:错误:类型参数S#1不在类型变量S#2的范围内 private TreeSet&gt;树; ^ 其中S#1,S#2是类型变量: S#1扩展了在EntryTreeSet类中声明的Object S#2扩展了CountablePair类中声明的Comparable EntryTreeSet.java:22:error:类型参数S#1不在类型变量S#2的范围内 this.tree = new TreeSet&gt;(); ^ 其中S#1,S#2是类型变量: S#1扩展了在EntryTreeSet类中声明的Object S#2扩展了CountablePair类中声明的Comparable
我想知道如何正确地使我的treeset保持CountablePair类的实例。
答案 0 :(得分:0)
似乎代码中唯一的问题是S
声明中EntryTreeSet
参数的边界缺失。这样的类声明正确编译:
public class EntryTreeSet<F, S extends Comparable<? super S>>
implements Map.Entry<F, S> {
答案 1 :(得分:0)
S是原始类型,这就是编译错误即将发生的原因。 请尝试以下代码。
public class EntryTreeSet<F,S extends Comparable<? super S>> implements Map.Entry<F,S>