Java 具有相同基类的泛型

Java 具有相同基类的泛型,java,generics,Java,Generics,我有一个定义如下的TreeNode类: class TreeNode<T extends MyClass> { public T element; public TreeNode<? extends MyClass> parent; public ArrayList<TreeNode<? extends MyClass>> children; } 类树节点{ 公共T元素; public TreeNodeFWIW,将类型参数

我有一个定义如下的TreeNode类:

class TreeNode<T extends MyClass> {
    public T element;
    public TreeNode<? extends MyClass> parent;
    public ArrayList<TreeNode<? extends MyClass>> children;
}
类树节点{
公共T元素;

public TreeNodeFWIW,将类型参数(
T extends MyClass
)的边界作为通配符(
?extends MyClass
)的边界重复,完全没有任何作用。只需使用无界通配符
(如
TreeNode
)。

由于我的评论似乎对您有所帮助,我将其作为答案发布:


如果
t
在树中的节点之间不匹配,我不认为使用泛型有什么意义。因此,
元素
应该是
MyClass
,如果您想保留泛型,可以缩短

ArrayList<TreeNode<? extends MyClass>> children;
ArrayList>children;
由于类定义中说明了
扩展MyClass
,因此编译器仍然能够推断只允许具有扩展
MyClass
(或
MyClass
本身)参数的树节点


请记住,在访问元素时仍然必须使用
MyClass
,因为这是唯一已知的公共超类。

老实说,如果树中的节点之间不匹配,我不认为使用泛型有什么意义。因此,
element
应该是
MyClass
。啊,是的,当然,j必须让它们都成为基本类型!作为旁注:我会用
List
替换
ArrayList
。这是我见过的最快的一次投票-你是怎么做到的?当它说“1个新答案”时,我在页面上因此,我加载并向上投票:PHa,从我的观点来看,它实际上是以1票开始的。希望我所有的答案都是这样:)嗯。现在我有一个问题,我必须不断地强制转换元素,因为我有一些类为我的类的特定实例扩展了TreeNode。这似乎是一个设计问题。我在这里将泛型的使用描述为“要么接受,要么放弃”。如果一棵树可以与某个
T
同质,那么将
TreeNode
TreeNode父节点一起使用,并
列出子节点
。否则,是的,强制转换是不可避免的。其他人阅读代码时是否会意识到它只能包含扩展MyClass的节点?我不反对你,我是j我们想知道这是否是一个有效的原因?@Lerp如果用户知道class
TreeNode
,她也会知道不存在参数不扩展
MyClass
(使用原始类型时除外)的实例。
List<TreeNode<?>> children;