我在转换泛型时遇到麻烦。我正在尝试使用通用迭代器来帮助我打印出二进制搜索树中的内容。但是我正在实现的for循环说它们是不兼容的类型,因此不会运行。想要对我在这里做错的事情有所了解。
public class BinarySearchTree<AnyType extends Comparable<? super AnyType>> implements Iterable{...}
public class MainBST {
public <AnyType> void print(BinarySearchTree<? extends AnyType> t ) {
for(AnyType x : t) //incompatible type
System.out.print(x + ", ");
System.out.println("\n");
}
}
最佳答案
问题是您的BinarySearchTree
声明。当它应该实现Iterable
时,它实现了原始的Iterable<AnyType>
类型。对于原始的Iterator
类型,使用Enhanced-for循环的代码仅知道这些值将与Object
兼容-因此您可以将循环更改为for (Object x : t)
,但是当然这不是您真正想要的。
我已经重现了您所显示的编译时错误,然后通过将声明更改为以下内容来修复了该错误:
class BinarySearchTree<AnyType extends Comparable<? super AnyType>>
implements Iterable<AnyType> {
...
}
(然后更改
iterator
方法以返回Iterator<AnyType>
当然。)