Java 如何在内部类中使用参数化泛型类型?
我试图实现一个具有泛型参数化类型的内部类 以下是我的代码的简短版本:Java 如何在内部类中使用参数化泛型类型?,java,generics,inner-classes,parameterized,Java,Generics,Inner Classes,Parameterized,我试图实现一个具有泛型参数化类型的内部类 以下是我的代码的简短版本: public class AVLTree<T extends Comparable<? super T>> implements Iterable<T> { ... private class BinaryNode<T extends Comparable<? super T>> { ... } private class TreePreOrderIt
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> {
...
}
}
公共类AVLTree只需将T
重命名为其他名称,这样它就不会与外部类T冲突
类型参数名称在所有类范围中都可见,包括内部类。所以内部类或实例方法应该声明另一个类型参数,其名称与类类型参数冲突。但是,静态嵌套类和静态方法没有这个问题。这是因为参数t
(作为BinaryNode
类的参数)与用于AVLTree
的参数相同--AVLTree
的参数通常在内部类BinaryNode
的定义范围内,但由于您为新参数指定了相同的名称,因此它将被隐藏。您可以改为使用:
private class BinaryNode<U extends Comparable<? super T>> { ... }
private class BinaryNode如果希望BinaryNode
中的T
与AVLTree
关联的封闭T
的类型相同,请删除BinaryNode
中的T
声明
如果希望BinaryNode
中的T
与包含的T
与AVLTree
关联,但您
想要能够访问属性吗
对于父级AVLTree
,将T
重命名为
还有别的
如果您不需要访问
封闭的AVLTree的属性,
使BinaryNode成为静态。只需从BinaryNode类中删除泛型类型声明。由于该类被声明为私有,它只能存在于AVLTree中,因此您可以在BinaryNode中的任何位置使用为AVLTree声明的T。您是否可以编辑您的问题以包括如何使用BinaryNode的泛型类型?e、 例如,BinaryNode的参数化类型是否与AVLTree相同?刚刚编辑。这能回答你的问题吗?好的,谢谢。我将其更改为其他内容,因为我需要访问AVLTree中的属性或字段。问题是我现在得到了一些编译错误,例如,“类型不匹配:无法从AVLTree.treeproordereditor转换为迭代器”和“绑定不匹配:类型T不是绑定参数的有效替代品Try我删除了T的声明(第一个选项);“I get the error”成员类型AVLTree.TreePreOrderWriter必须使用参数化类型限定,因为它不是静态的。“当我从以前的代码中删除“”时,我得到警告“AVLTree.TreePreOrderWriter是原始类型”。对泛型类型AVLTree.treePreOrderWriter的引用应参数化。“