S
Spacerat
Gast
Folgendes Beispiel:
Ich hab' schon viel versucht, aber ich dreh' mich im Kreis. Ich wollte es so haben, dass der Triangulator mit jeder Art Polygonen ob 2D, 3D, Vertex oder sonst was klar kommt. Solange ich Polygone verwende, die direkt aus abgeleiteten Klassen der Klasse Point<> (also P2D und P3D). Sobald ich aber höhere Klassen (z.B. Vertex) verwende, erhalte ich obigen Fehler. Hat dafür jemand evtl. einen Vorschlag?
Diverse Interfaces usw. habe ich im übrigen auch schon ausprobiert. Ich bin mit meinem Latein am Ende. Ich versteh' einfach nicht, wieso Vertex kein Point<P> mehr ist, obwohl es Point3 direkt erweitert.
Java:
import java.util.ArrayList;
import java.util.List;
public class GenerischesGenerve {
public static void main(String[] args) {
List<PolygonV> polygons = new ArrayList<>();
Triangulator.triangulate(polygons);
/* ^^^^^^^^^^^
* Bound mismatch: The generic method triangulate(List<Polygon<P>>)
* of type Triangulator is not applicable for the arguments
* (List<PolygonV>). The inferred type Vertex is not a valid substitute
* for the bounded parameter <P extends Point<P>>
*
* WAS SOLL DAS?
*/
}
}
class Polygon<T extends Point<?>> {
// Wenn hier das ? ein T wird, kann
// ich PolygonV nicht mehr erstellen.
}
class Point<T extends Point<T>> {
}
class Point3 extends Point<Point3> {
}
class Vertex extends Point3 {
}
class PolygonV extends Polygon<Vertex> {
}
class Triangulator {
public static <P extends Point<P>> List<Polygon<P>> triangulate(List<Polygon<P>> polygons) {
// Wenn ich hier mit Wildcards arbeite habe ich keinen
// Zugriff auf die Methoden der Klasse Point.
// doWork();
return polygons;
}
}
Diverse Interfaces usw. habe ich im übrigen auch schon ausprobiert. Ich bin mit meinem Latein am Ende. Ich versteh' einfach nicht, wieso Vertex kein Point<P> mehr ist, obwohl es Point3 direkt erweitert.