如何在内部类中使用参数化泛型类型?

我正在尝试实现具有泛型参数化类型的内部类。

这是我的代码的简短版本:

public class AVLTree<T extends Comparable<? super T>> implements Iterable<T> {
 ...

 private class BinaryNode<T extends Comparable<? super T>> {
  ...
 }

 private class TreePreOrderIterator<E extends Comparable<? super E>> implements Iterator<E> {
  ...
 }

}

它不起作用。Eclipse/Java 给我一个警告,即内部类上的类型参数正在“隐藏”超类的参数。关于如何解决这个问题的任何想法?T

编辑:我添加了另一个内部类,我遇到了问题:.对于 、 和 的泛型类型将相同。内部类需要访问 AVLTree 中的字段。TreePreOrderIteratorTAVLTreeBinaryNodeTreePreOrderIterator

编辑2:此外,访问 a ,这是一个冲突。IteratorBinaryNode<T>

(注意:这是我为一个班级做的更大项目的一部分。如果需要任何其他信息,请询问。


答案 1

如果希望 in 与 关联的封闭类型相同,请删除 in 的声明。TBinaryNodeTAVLTreeTBinaryNode

如果希望 in 不同于 与 关联的封闭,但希望能够访问父项的属性,请重命名为其他名称。TBinaryNodeTAVLTreeAVLTreeT

如果不需要访问封闭的属性,则设置为静态。AVLTreeBinaryNode


答案 2

只需重命名为其他名称,这样它就不会与外部类 T 冲突。T

类型参数名称在所有类作用域(包括内部类)中都可见。因此,内部类或实例方法应声明另一个名称与类类型参数冲突的类型参数。但是,静态嵌套类和静态方法没有这个问题。


推荐