Ich hatte noch auf Landeis Antwort gewartet, aber da er auch nur noch mal die Bedeutung von extend und super erläutert hat (und ganz ehrlich, super ist verwirrend je mehr man darüber nachdenkt und der Nutzen auch nicht gleich ersichtlich)(außerdem finde ich meine Erklärung simpler ) aber ich habe die „Lösung gefunden“, naja zumindest ist der Compiler zufrieden
public class Foo<A> {
Bar<? super A> bar;
public <P extends Bar<? super A>> Foo(P p) {
}
}
public class Foo<A> {
Bar<? super A> bar;
public Foo(Bar<? super A> p) {
}
}
Ersteres war komplett unnötig und auch nur ein Überbleibsel, ist aber eigentlich legitim. Den Compiler hat es im kleinen kompilierbaren Beispiel auch nicht gestört. Dabei war es nur eine Kopie der Klassen und Funktionen ohne Logik. Im Produktionscode aber schien er nicht assoziieren können das ? = ?. Die Lösung kam mir als er beim Aufruf von do( BoardSystemLogic) geantwortet hatte „BoardSystemLogic capture ?“ nicht zu kennen - völlig daneben.