Java で Generics を使用すると奇妙な問題が発生します。ジェネリックは私にとってまったく新しいものですが、基本は理解できたと思います。
このコードを見てください:
private void drawQuadtreeBoxes_helper(QuadTree<?> node) {
if (node == null)
return;
Vector3 min = node.bbox.min;
Vector3 max = node.bbox.max;
// Draw the boxes (...)
if (node.hasChildren()) {
Array<QuadTree<?>> children = node.getChildren(); // ERROR HERE
for (QuadTree<?> child : children) {
drawQuadtreeBoxes_helper(child);
}
}
}
四分木構造内に格納されたオブジェクトのタイプはこのメソッドには関係ないため、このメソッドをすべての種類の四分木に適用できるように、メソッド シグネチャにワイルドカードを使用します。
メソッド getChildren() は、ノードの 4 つの子を返します。これは、Array と呼ばれるコレクション クラス内に格納されます (Arrayの実装)。getChildren() の戻り値の型は確かにArray<QuadTree<?>>
(Eclipse でさえツールチップ内でそう言っている) と確信していますが、それでもこの行にエラーが表示され、次のように伝えられます。
cannot convert from Array<QuadTree<capture#6-of ?>> to Array<QuadTree<?>>
ここに楽しい部分があります。これを解決する方法について Eclipse に提案を求めると、これが提案の 1 つです。
Change type of 'children' to 'Array<QuadTree<?>>'
しかし、それはすでにこのタイプです!改善されました: この提案をクリックすると、Eclipse はこの行を次のように変更します。
Array<?> children = node.getChildren();
もちろん、これは以下のすべてのコードを破壊します。
ここで一体何が起こっているのですか?誰か教えてください。