Ich versuche, eine Matrix-Bibliothek (Bildungszweck) zu erstellen und ein Hindernis erreicht habe ich bin mir nicht sicher, wie man mit Gnade zu nähern. Hinzufügen von zwei Matrizen ist eine einfache Aufgabe, mit einer Methode get() auf jedem einzelnen Elemente der Matrizen einzeln.Abstrakte Klassenmethode - Um Kind Klassenobjekt zu instanziieren?
Die Syntax, die ich verwendet habe, ist jedoch falsch. NetBeans behauptet, dass es eine Klasse erwartet, aber einen Typparameter gefunden hat; Für mich ist ein Typparameter nur ein Satz mit 1: 1 Mapping auf die Menge der Klassen.
Warum liege ich hier falsch? Ich habe noch nie gesehen, dass ein Typparameter etwas anderes als eine Klasse zuvor ist, also sollte das folgende Bit nicht bedeuten, dass M eine Klasse ist?
M erweitert Matrix
public abstract class Matrix<T extends Number, M extends Matrix>
{
private int rows, cols;
public Matrix(int rows, int cols)
{
this.rows = rows;
this.cols = cols;
}
public M plus(Matrix other)
{
// Do some maths using get() on implicit and explicit arguments.
// Store result in a new matrix of the same type as the implicit argument,
// using set() on a new matrix.
M result = new M(2, 2); /* Example */
}
public abstract T get(int row, int col);
public abstract void set(int row, int col, T val);
}
Warum hat die Matrix-Klasse einen Typ, der sich erweitert? –
@ cricket_007 Meine Argumentation ist, dass die Funktion plus() ein Objekt zurückgeben sollte, dessen Klasse Matrix erweitert. Es klingt jetzt wirklich albern, dass ich es austippe. Vielleicht sollte der Rückgabetyp nur Matrix sein. Aber dann kann ich keine Matrix innerhalb der plus() Funktion instanziieren, oder? Wie es eine abstrakte Klasse ist. –
Sie können einen Typparameter 'M' nicht direkt instanziieren, weil Sie seinen genauen Typ nicht kennen. – Andrew