Java BST迭代器中的强制转换错误

Java BST迭代器中的强制转换错误,java,generics,Java,Generics,我在为泛型铸造方面遇到了麻烦。我想做的是使用一个泛型迭代器来帮助我打印出二进制搜索树中的内容。然而,我正在实现的for循环表示它们是不兼容的类型,因此不会运行。想了解一下我做错了什么 public class BinarySearchTree<AnyType extends Comparable<? super AnyType>> implements Iterable{...} public class MainBST { public <AnyTy

我在为泛型铸造方面遇到了麻烦。我想做的是使用一个泛型迭代器来帮助我打印出二进制搜索树中的内容。然而,我正在实现的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问题在于您的
BinarySearchTree
声明。它正在实现raw
Iterable
类型,而它应该实现
Iterable
。对于原始
迭代器
类型,使用增强for循环的代码只知道值将与
对象
兼容,因此您可以将循环更改为
for(Object x:t)
,但这当然不是您真正想要的

我复制了您显示的编译时错误,然后将声明更改为:

class BinarySearchTree<AnyType extends Comparable<? super AnyType>> 
    implements Iterable<AnyType> {
    ...
}

class BinarySearchTree使您的类真正实现了
Iterable
,还是实现了
Iterable
?听起来应该是后者。。。