Oliver Pfeiffer
2006-10-17 11:46:14 UTC
Ich habe hier ein wirklich unangenehmes und leider bedeutendes Problem, das
man eventuell mit Generics lösen kann (oder auch nicht?). Vielleicht ist
auch der von mir eingeschlagene Weg bereits im Grundsatz falsch. Auf jeden
Fall würde ich mich über jede Hilfe freuen!
Ich habe das Problem auf ein Minimum reduziert und unten einen kurzen
Java-Pseudo-Code angehängt, der weder type-safe noch compilierbar ist. Das
ganze dient lediglich dazu, die Problematik zu verdeutlichen.
Grundsätzlich möchte ich verschiedene ableitbare Intervall Klassen bauen,
die jeweils mit einer combine(Interval):Interval Methode mit anderen
Intervallen kombiniert werden können. Das kniffelige liegt darin, dass ein
Interval nur mit anderen Intervallen desselben oder eines Subtyps (nicht
jedoch Supertyps) kombiniert werden dürfen. Das ganze muss natürlich ohne
Overloading nur mit Overriding erfolgen, ansonsten verliert man die
Combinator Flexibilität. Casten oder instanceof würde einen Verlust der
Typsicherhiet bedeuten.
--
Grüße - Regards
Oliver Pfeiffer
ICQ-ID 84320006
class Test {
static class Interval<I extends Interval> {
I combine(I iv) {
iv.method();
return new I();
}
void method() {
// something interval specific
}
}
static class Subinterval<I extends Subinterval> extends Interval<I> {
@Override
I combine(I iv) {
iv.submethod();
return new I();
}
void submethod() {
// something subinterval specific
}
}
static class Combinator<I extends Interval> {
I trippleCombine(I i1, I i2, I i3) {
return i1.combine(i2).combine(i3);
}
}
public static void main(String[] args) {
Subinterval<Subinterval> a = new Subinterval<Subinterval>();
Subinterval<Subinterval> b = new Subinterval<Subinterval>();
Subinterval<Subinterval> c = new Subinterval<Subinterval>();
Subinterval<Subinterval> result =
new Combinator<Subinterval>().trippleCombine(a, b, c);
}
}
man eventuell mit Generics lösen kann (oder auch nicht?). Vielleicht ist
auch der von mir eingeschlagene Weg bereits im Grundsatz falsch. Auf jeden
Fall würde ich mich über jede Hilfe freuen!
Ich habe das Problem auf ein Minimum reduziert und unten einen kurzen
Java-Pseudo-Code angehängt, der weder type-safe noch compilierbar ist. Das
ganze dient lediglich dazu, die Problematik zu verdeutlichen.
Grundsätzlich möchte ich verschiedene ableitbare Intervall Klassen bauen,
die jeweils mit einer combine(Interval):Interval Methode mit anderen
Intervallen kombiniert werden können. Das kniffelige liegt darin, dass ein
Interval nur mit anderen Intervallen desselben oder eines Subtyps (nicht
jedoch Supertyps) kombiniert werden dürfen. Das ganze muss natürlich ohne
Overloading nur mit Overriding erfolgen, ansonsten verliert man die
Combinator Flexibilität. Casten oder instanceof würde einen Verlust der
Typsicherhiet bedeuten.
--
Grüße - Regards
Oliver Pfeiffer
ICQ-ID 84320006
class Test {
static class Interval<I extends Interval> {
I combine(I iv) {
iv.method();
return new I();
}
void method() {
// something interval specific
}
}
static class Subinterval<I extends Subinterval> extends Interval<I> {
@Override
I combine(I iv) {
iv.submethod();
return new I();
}
void submethod() {
// something subinterval specific
}
}
static class Combinator<I extends Interval> {
I trippleCombine(I i1, I i2, I i3) {
return i1.combine(i2).combine(i3);
}
}
public static void main(String[] args) {
Subinterval<Subinterval> a = new Subinterval<Subinterval>();
Subinterval<Subinterval> b = new Subinterval<Subinterval>();
Subinterval<Subinterval> c = new Subinterval<Subinterval>();
Subinterval<Subinterval> result =
new Combinator<Subinterval>().trippleCombine(a, b, c);
}
}