Capture(?) - Problem bei rekursivem Aufruf

mc_gulasch

Erfahrenes Mitglied
Aloah,
ich hab eine Klasse Node<?>, die wiederum Node<?>s als Kinder hat, wobei die beiden ? nicht notwendigerweise die gleichen sein müssen. Kurzversion:
Java:
public class Node <T> implements Iterable<Node<?>> 
{
  private ArrayList<Node<?>> childs;
  //...
  public Iterator<Node<?>> iterator() 
 {
	return childs.iterator();
 }
 public boolean hasChilds()
 {
    return !childs.isEmpty();
 }
}

Über diese Nodes wird eine (zunächst Baum-) Struktur aufgebaut, die ich rekursiv ausgeben möchte:
bla
+blabla
++blablabla
+blablubb
++blablubbbla
...
Java:
public class Struktur
{
  private int counter=0;
  private<E> void printNode(Node<E> n)
 {
   for(int i=0;i<counter;i++)
	System.out.print("+");
   System.out.println(n.toString());
   counter++;
   if(n.hasChilds())
  {
	Iterator<?> it = n.iterator();
	while(it.hasNext())
	{
		printNode(it.next()); //The method printNode(Node<E>) in the type Struktur is not applicable for the arguments (capture#14-of ?)
                counter--;
	}
 }
}

Die Fehlermeldung
Code:
/The method printNode(Node<E>) in the type Struktur is not applicable for the arguments (capture#14-of ?)
sagt mir leider recht wenig. Es scheint wohl mit Captures zu tun zu haben, aber die hab ich noch nicht so ganz überrissen. Hat wer ne Idee? Ich möchte ungern eine Parametrisierung mittels "Object" durchziehen, da das mal richtig hässlich ist.
 
Ich kann aktuell nur raten, aber ich denke die Ursache liegt in dieser Zeile:
Java:
Iterator<?> it = n.iterator();

Bist du dir sicher, dass hier das '?' korrekt ist? Müsste es vielleicht heißen
Java:
Iterator<? extends Node<E>> it = n.iterator();
Oder so ähnlich?
 

Neue Beiträge

Zurück