Gibt es eine Möglichkeit, das hier anständig hinzukriegen?
Die Set-Owener Methoden funktionieren so natürlich nicht (und das zurecht).
Ich hätte aber doch gern, dass wenn
aufgerufen wird, beim Kompilieren auch nur ein Implementer2 Objekt akzeptiert wird und kein Implementer1 Objekt.
In der Methode selbst kann ich das natürlich prüfen und eine ClassCastException werfen, aber eleganter wäre es natürlich, wenn der Compiler das schon erkennen könnte.
Ich dachte an einen Weg über Generics, allerdings bin ich auf keinen grünen Zweig gekommen.
Java:
public abstract class AbstractClass {
public abstract AbstractClass getOwner();
public abstract void setOwner(AbstractClass value);
}
public final class Implementer1 extends AbstractClass {
@Override
public Implementer1 getOwner() {
return null;
}
@Override
public void setOwner(Implementer1 value) {} //zu restriktiv, Methode wird nicht implementiert
}
public final class Implementer2 extends AbstractClass {
@Override
public Implementer2 getOwner() {
return null;
}
@Override
public void setOwner(Implementer2 value) {} //zu restriktiv, Methode wird nicht implementiert
}
Die Set-Owener Methoden funktionieren so natürlich nicht (und das zurecht).
Ich hätte aber doch gern, dass wenn
Code:
new Implementer2().setOwner(...)
In der Methode selbst kann ich das natürlich prüfen und eine ClassCastException werfen, aber eleganter wäre es natürlich, wenn der Compiler das schon erkennen könnte.
Ich dachte an einen Weg über Generics, allerdings bin ich auf keinen grünen Zweig gekommen.