Heyho,
meine Idee ist folgende:
Ich habe eine abtrakte Klasse 'Value' die representiert einen lesbaren Wert.
Zu dieser abstrakten Klasse gibt es nicht abstrakte Unterklassen, manche von denen Erlauben es, den Wert auch zu ändern. (Ja ich hab das hier etwas vereinfacht, bei meinem echten Projekt gibts noch mehr Details)
Ich möchte jetzt, dass jedes Objekt jeder dieser Klassen ein Wrapper-Objekt zurückgeben kann, das nur lesenden Zugriff gewährt (und auch sonnstige Funktionen versteckt).
Um das zu erreichen setze ich wie unten gezeigt annonymous inner classes ein. Aber das tut ganz und gar nicht so wie ich will:
th ist private, wird also nicht vererbt. Die Methode sollte also, dass th des erzeugenden Objectes sehen. Also th != this. Trotzdem gibt's ne Endlosschleife.
Kann mir jemand erklären warum?
Moc
meine Idee ist folgende:
Ich habe eine abtrakte Klasse 'Value' die representiert einen lesbaren Wert.
Zu dieser abstrakten Klasse gibt es nicht abstrakte Unterklassen, manche von denen Erlauben es, den Wert auch zu ändern. (Ja ich hab das hier etwas vereinfacht, bei meinem echten Projekt gibts noch mehr Details)
Ich möchte jetzt, dass jedes Objekt jeder dieser Klassen ein Wrapper-Objekt zurückgeben kann, das nur lesenden Zugriff gewährt (und auch sonnstige Funktionen versteckt).
Um das zu erreichen setze ich wie unten gezeigt annonymous inner classes ein. Aber das tut ganz und gar nicht so wie ich will:
Code:
/**
* A class to test an inner class problem.
*/
public class ICTest {
private static abstract class Value {
public abstract double getValue();
// private field, subclasses cannot see it.
private final Value th = this;
public final Value readOnly = new Value() {
@Override public double getValue() { return th.getValue(); } };
}
private static class WritableValue extends Value {
private double v = 0.0;
@Override
public double getValue() {
return v;
}
public void setValue(double value) {
v = value;
}
}
public static void main(String[] args) {
System.out.println("Creating new Writable Value");
WritableValue test = new WritableValue(); // ###### Hangs
System.out.println("Setting it");
test.setValue(2.0);
System.out.println(test.getValue());
}
}
th ist private, wird also nicht vererbt. Die Methode sollte also, dass th des erzeugenden Objectes sehen. Also th != this. Trotzdem gibt's ne Endlosschleife.
Kann mir jemand erklären warum?
Moc