我在转换泛型时遇到麻烦。我正在尝试使用通用迭代器来帮助我打印出二进制搜索树中的内容。但是我正在实现的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>当然。)

10-05 18:20