Java泛型有一个声明

时间:2014-04-20 02:16:23

标签: java generics

我有一个声明为:

的通用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);
    }
}

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

3 个答案:

答案 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;这里。