Detailed Java Generics
I have a very detailed/complicated java generics question. Consider
the following code
public abstract class AEdge {
ANode fr, to;
}
public abstract class ANode { }
public class CEdge extends AEdge { }
public class CNode extends ANode { }
public class MyEdgeDatabase<N extends ANode, E extends AEdge> {
Set<E> edges;
public abstract class ForEachEdgeFrom {
public ForEachEdgeFrom(N n) {
for(E e : edges) if (e.fr == n) run(e);
}
public abstract void run(E e);
}
}
public class Test {
MyEdgeDatabase<CNode, CEdge> edgeDB
= new MyEdgeDatabase<CNode, CEdge>();
CNode n = new CNode();
public void doIt() {
edgeDB.new ForEachEdgeFrom(n){
public void run(CEdge e) {
System.out.println(e);
}
};
}
}
The doIt() method will not compile. It gives the following error:
"No enclosing instance of type MyEdgeDatabase<N,E> is accessible. Must
qualify the allocation with an enclosing instance of type
MyEdgeDatabase<N,E> (e.g. x.new A() where x is an instance of
MyEdgeDatabase<N,E>)."
What does this mean and how to I fix it? Please don't suggest other
ways of iterating through edges in MyEdgeDatabase (we have reason to do
it this way).