Wil*_*l M 17 java generics parameterized inner-classes
我试图实现一个具有通用参数化类型的内部类.
这是我的代码的简短版本:
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> {
...
}
}
Run Code Online (Sandbox Code Playgroud)
这是行不通的.Eclipse/Java给我一个警告,T内部类的类型参数是"隐藏"超类的参数.有关如何解决此问题的任何想法?
编辑:我添加了另一个我遇到问题的内部类:TreePreOrderIterator.通用型T将是相同的AVLTree,BinaryNode和TreePreOrderIterator.内部类需要访问AVLTree中的字段.
EDIT2:此外,Iterator访问a BinaryNode<T>,这是一个冲突.
(注意:这是我正在为一堂课做的更大项目的一部分.如果需要任何其他信息,请询问.)
ILM*_*tan 29
如果您希望Tin BinaryNode与T相关联的封闭类型相同AVLTree,请删除Tin 的声明BinaryNode.
如果您希望Tin BinaryNode与要T
关联的封闭不同AVLTree,但您希望能够访问父级的属性,请将其AVLTree重命名T为其他内容.
如果您不需要访问封闭的属性AVLTree,请创建BinaryNode静态.
只需将其重命名T为其他内容,这样就不会与外部类T冲突.
类型参数名称在所有类范围中都可见,包括内部类.因此内部类或实例方法应该声明另一个名称与类类型参数冲突的类型参数.但是,静态嵌套类和静态方法没有这个问题.