Ich habe hin und wieder das Problem, dass ich sowas habe:
Das funktioniert, aber natürlich ist es dumm, mehrere Referenzen auf das gleiche Objekt zu halten. Es wäre auch möglich, a in AWrapper protected zu machen, und zu casten, aber das ist wirklich hässlich. Eine Lösungsmöglichkeit, die ich gefunden habe, um das zu vermeiden, benutzt abstrakte Klassen:
Trotzdem nicht hübsch, und wenn ich von den einzelnen Wrappern noch in "andere Richtungen" ableiten will, komme ich um eine zusätzliche Reihe von konkreten Klassen (statt des Tricks mit den statischen Methoden) nicht herum.
Man kann sicher auch Generics benutzen, aber nicht immer will man einen Typparameter haben.
Wie löst ihr sowas?
Java:
class A {}
class B extends A{}
class C extends B{}
class AWrapper {
private final A a;
public AWrapper(A a) {
this.a = a;
}
}
class BWrapper extends AWrapper {
private final B b;
public BWrapper(B b) {
super(b);
this.b = b;
}
}
class CWrapper extends BWrapper {
private final C c;
public CWrapper(C c) {
super(c);
this.c = c;
}
}
Das funktioniert, aber natürlich ist es dumm, mehrere Referenzen auf das gleiche Objekt zu halten. Es wäre auch möglich, a in AWrapper protected zu machen, und zu casten, aber das ist wirklich hässlich. Eine Lösungsmöglichkeit, die ich gefunden habe, um das zu vermeiden, benutzt abstrakte Klassen:
Java:
abstract class AWrapper {
public abstact A getA();
}
abstract class BWrapper extends AWrapper {
public abstact B getB();
public A getA() { return getB(); }
}
abstract class CWrapper extends BWrapper {
public abstact C getC();
public B getB() { return getC(); }
}
class Wrappers {
public static AWrapper newAWrapper(final A a) {
return new AWrapper(){ public A getA() {return a;} };
}
public static BWrapper new BWrapper(final B b) {
return new BWrapper(){ public B getB() {return b;} };
}
public static CWrapper new CWrapper(final C c) {
return new CWrapper(){ public C getC() {return c;} };
}
}
Trotzdem nicht hübsch, und wenn ich von den einzelnen Wrappern noch in "andere Richtungen" ableiten will, komme ich um eine zusätzliche Reihe von konkreten Klassen (statt des Tricks mit den statischen Methoden) nicht herum.
Man kann sicher auch Generics benutzen, aber nicht immer will man einen Typparameter haben.
Wie löst ihr sowas?
Zuletzt bearbeitet: