我有一个声明为:
的通用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);
}
}
我已经尝试过几个不同的声明都收到错误。有谁知道我会如何正确地宣布这个?
答案 0 :(得分: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);
}
}
这样类型参数在类级别声明并具有适当的边界。
答案 1 :(得分:1)
我认为public class PQAVL<T>
必须是public class PQAVL<T extends Comparable<T>>
。
您目前所做的是接受任何T作为该类的通用,然后确保在较低级别它是可比较的。您必须在类声明级别执行此操作。
答案 2 :(得分:0)
您只需使用AVLTree<T>
。
&#34; extends Comparable<T>
&#34; part只是指定对T
可以是什么的限制,但是在声明该类型的变量时不是你指定的东西。您只在声明类型本身时指定。
顺便说一句,这是一个奇怪的措辞选择说&#34;有一个声明&#34 ;;通常我们只是打电话给#34; avl&#34; a&#34; field&#34;这里。