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

在java中使用泛型组合元素的正确方法,java,generics,Java,Generics,树包含TreeNode的元素和T类型的数据元素 我的定义如下 class TreeNode<T> { T data; } 类树节点 { T数据; } 下面的话毫无意义 class Tree<TreeNode<T>> { TreeNode<T> node; } 类树 { 树节点; } 然后案例1 类树 { 树节点; } 但上面给出了第3行T处的误差 然后案例2 类树 { 树节点; } 编译器在第1-T行的T处投诉无法解决 但

树包含TreeNode的元素和T类型的数据元素

我的定义如下

class TreeNode<T>
{
    T data;
}
类树节点
{
T数据;
}
下面的话毫无意义

class Tree<TreeNode<T>>
{
   TreeNode<T> node;
}
类树
{
树节点;
}
然后案例1

类树
{
树节点;
}
但上面给出了第3行T处的误差

然后案例2

类树
{
树节点;
}
编译器在第1-T行的T处投诉无法解决

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

class Tree<T extends TreeNode<T>>
{
    TreeNode<T> node;
}
类树
{
树节点;
}
但是上面的说法没有道理。在类似T的情况下是正确的,但这里它表示Tree包含类型为子类型TreeNode的元素,其中包含类型为T的数据,inturn是类型为T的,这表示TreeNode也包含类型为TreeNode的元素,这不是我的意图

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

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


另外,如何参数化TreeNode和Tree,即TreeNode包含T类型的元素,并且还具有TreeNode左子级和右子级的指针?

类Tree{TreeNode;}有什么问题?是的,这将解决问题,我一直认为Tree包含TreeNode类型的元素。
class Tree<N extends TreeNode<T>>
{
   TreeNode<T> node;
}
class Tree<T extends TreeNode<T>>
{
    TreeNode<T> node;
}