ジェネリックのキャストに問題があります。私がやろうとしているのは、汎用イテレーターを使用して、バイナリ検索ツリーの内容を印刷できるようにすることです。ただし、私が実装している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
宣言です。実装する必要があるときに、raw Iterable
型を実装していIterable<AnyType>
ます。rawIterator
型では、enhanced-forループを使用するコードは、値が互換性があることだけを知っているObject
ので、ループをに変更できますfor (Object x : t)
が、もちろんそれは本当に必要なことではありません。
表示したコンパイル時エラーを再現し、宣言を次のように変更して修正しました。
class BinarySearchTree<AnyType extends Comparable<? super AnyType>>
implements Iterable<AnyType> {
...
}
(そしてもちろん、iterator
メソッドを変更して戻りIterator<AnyType>
ます。)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加