Conkerchen
Grünschnabel
Habe eine Frage zu Generics. Am Besten erkläre ich es direkt mal an dem Beispiel, an dem ich gerade dran bin:
Ich habe eine Klasse Matrix zur Rechnung mit Matrizen. Hier möchte ich, dass als Einträge ausschließlich Elemente eingefügt werden können, die auch Elemente eines Körpers bzw. einer algebraischen Struktur sind, auf der zumindest zwei Operationen add und mult definiert sind. Als Körper habe ich jetzt eine Klasse Rational, die diese Eigenschaft erfüllt.
Jetzt habe ich außerdem eine Klasse Körper, von der Rational erbt, um in den Kreis der möglichen Elemente der Matrix mit aufgenommen zu werden.
Mein großes Problem ist nun, dass ich nicht weiß, wie ich meine Matrix initialisieren kann. Der code sieht wie folgt aus:
Wie bekomme ich da jetzt eine Null rein? Also nicht die Integer-Null, auch nicht die null-Referenz (die ist ja schon drin). Ich möchte, dass entsprechend des Typs, den diese Matrix aufnimmt, das entsprechende Null-Element des Körpers eingefügt wird. Ich habe das mit Generics gemacht, was beim Einfügen auch ganz gut funktioniert. Alles, was nicht dem Typ der Matrix entspricht, wird schon zur Compile-Zeit für die Einfüge-Operation Abgelehnt.
Aber an dieser Stelle will ich aber ja nicht sicherstellen, dass ein entsprechender Typ beim Afuruf der Methode initZero() verlangt wird, sondern ich will, dass initZero() das Null-Element der Klasse des jeweiligen Typs herausfischt. Also etwa so:
So geht es aber anscheinend nicht. Wie komme ich an das entsprechende Nullelement der Klasse Type? Oder mache ich hier grundsätzlich alles total falsch und verkehrt?
Ich habe eine Klasse Matrix zur Rechnung mit Matrizen. Hier möchte ich, dass als Einträge ausschließlich Elemente eingefügt werden können, die auch Elemente eines Körpers bzw. einer algebraischen Struktur sind, auf der zumindest zwei Operationen add und mult definiert sind. Als Körper habe ich jetzt eine Klasse Rational, die diese Eigenschaft erfüllt.
Jetzt habe ich außerdem eine Klasse Körper, von der Rational erbt, um in den Kreis der möglichen Elemente der Matrix mit aufgenommen zu werden.
Mein großes Problem ist nun, dass ich nicht weiß, wie ich meine Matrix initialisieren kann. Der code sieht wie folgt aus:
Code:
public Matrix initZero () {
for (int i = 0; i < line; i++) {
for (int j = 0; j < col; j++) {
value[i][j] = ?
}
}
return this;
}
Wie bekomme ich da jetzt eine Null rein? Also nicht die Integer-Null, auch nicht die null-Referenz (die ist ja schon drin). Ich möchte, dass entsprechend des Typs, den diese Matrix aufnimmt, das entsprechende Null-Element des Körpers eingefügt wird. Ich habe das mit Generics gemacht, was beim Einfügen auch ganz gut funktioniert. Alles, was nicht dem Typ der Matrix entspricht, wird schon zur Compile-Zeit für die Einfüge-Operation Abgelehnt.
Aber an dieser Stelle will ich aber ja nicht sicherstellen, dass ein entsprechender Typ beim Afuruf der Methode initZero() verlangt wird, sondern ich will, dass initZero() das Null-Element der Klasse des jeweiligen Typs herausfischt. Also etwa so:
Code:
value[i][j] = Field<Type>.ZERO.clone();
So geht es aber anscheinend nicht. Wie komme ich an das entsprechende Nullelement der Klasse Type? Oder mache ich hier grundsätzlich alles total falsch und verkehrt?
Zuletzt bearbeitet: