我有一个通用的AVL树类声明为:

public class AVLTree<T extends Comparable<T>>

每当我尝试将avl树类初始化为构造函数中的泛型时,我就会在另一个类中遇到编译器错误。

public class PQAVL<T> {
private AVLTree<T extends Comparable<T>> avl;
    public PQAVL() {
        avl = new AVLTree<T extends Comparable<T>>(true);
    }
}

我已经尝试了几个接收错误的不同声明。 有谁知道我会如何正确地宣布这个?

===============>>#1 票数:1 已采纳

声明新类型变量时使用<T extends ...>的语法。

声明变量或字段时,不能声明新的类型变量。 您也不能将新类型变量声明为初始化表达式的tpe参数,例如

avl = new AVLTree<T extends Comparable<T>>(true);

你需要把你的班级变成类似的东西

public class PQAVL<T extends Comparable<T>> {
    private AVLTree<T> avl;
    public PQAVL() {
        avl = new AVLTree<T>(true);
    }
}

这样类型参数在类级别声明并具有适当的边界。

===============>>#2 票数:1

我认为public class PQAVL<T>需要是public class PQAVL<T extends Comparable<T>>

你目前所做的是接受任何T作为该类的通用,然后在较低级别确保它是可比较的。 您必须在类声明级别执行此操作。

===============>>#3 票数:0

您只需要使用AVLTree<T>

extends Comparable<T> ”部分仅指定对T的限制,但在声明该类型的变量时不是您指定的内容。 您只在声明类型本身时指定。

顺便说一下,说“有一个声明”是一个奇怪的措辞选择; 通常我们在这里称“avl”为“字段”。

  ask by translate from so

未解决问题?本站智能推荐: