在Java中使用泛型来组合元素的正确方法

时间:2017-02-28 03:56:52

标签: java generics

Tree包含TreeNode的元素,数据元素类型为T。

我定义如下

class TreeNode<T>
{
    T data;
}

以下是有道理的。

class Tree<TreeNode<T>>
{
   TreeNode<T> node;
}

然后 案例1

class Tree
{
    TreeNode<T> node;
}

但是上面在第3行的T处给出了错误。

然后 案例2

class Tree<N extends TreeNode<T>>
{
   TreeNode<T> node;
}

编译器在第1行的T处抱怨 - T无法解析。

但在 案例3 编译器下面很高兴

class Tree<T extends TreeNode<T>>
{
    TreeNode<T> node;
}

但上述选择是有意义的。它会像T扩展Comparable一样真实,但在这里它说Tree包含类型为子类型TreeNode的元素,包含类型为T的数据,其中int为T类型,它表示TreeNode也包含TreeNode类型的元素,不是我的意图。

定义Tree包含数据元素T的TreeNode类型元素的正确方法是什么? 和Tree包含子类型TreeNode的元素?

有没有办法告诉编译器在TreeNode类中声明了T?

如何对TreeNode和Tree进行参数化,说TreeNode包含T类型的元素,还有TreeNode左子和右子的指针?

0 个答案:

没有答案