Jeg løb ind i denne situation i dag: En inner class som virtuelt
overskriver en metode fra sin superklasse, og hvis superklasses
konstruktor kalder denne metode.
Problemet er at indtil superklassens konstruktor bliver færdig har
inner-class'en ikke en reference til sin ydre klasse, så hvis metoden
henviser til felter i den ydre klasse, så giver det en Null Pointer
Exception.
Et eksempel på kode:
---
class Outer {
public static void main(String args[]) {
Outer o = new Outer();
Inner i = o.new Inner();
}
class Inner extends Super {
Inner () {
method();
}
void method() {
System.out.println(Outer.this);
}
}
}
abstract class Super {
Super() {
method();
}
abstract void method();
}
---
Spørgsmålet er så: Er det korrekt opførsel? Jeg kunne ikke finde et
sted i JLS2 der svarede på det. Hvis nogen kan pege på et sted (eller
flere steder) der viser at det er korrekt opførsel, så vil jeg være
taknemmelig.
<URL:
http://java.sun.com/docs/books/jls/second_edition/html/jTOC.doc.html>
(Jeg har løst problemet ved at omskrive programmet, men jeg vil gerne
forstå det bedre).
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:
http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'