Überschreiben von Methoden mit primitiven Typen #294
Labels
No Label
Codegen
confirmed
duplicate
Eclipse-Plugin
Feature Request
generics
in progress
invalid
JavaCompilerCore
needs info
Parser
Trash
Type
Unify
won't fix
works for me
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: JavaTX/JavaCompilerCore#294
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Da in JavaTX primitive Datentypen durch ihre Wrapper-Klassen ersetzt werden, kommt es zu problematischem Verhalten, wenn man Methoden von Oberklassen überschreiben will, da die eigentliche Methode nicht überschrieben wird, sondern eine Überladung mit neuen Typ stattfindet. Hier beispielhaft die versuchte Überladung der Methode
equals(Object o)
von ObjectDa primitive Datentyp
boolean
durchjava.lang.Boolean
substituiert wird, wirdboolean equals(Object o)
nicht überschrieben, sondern mitjava.lang.Boolean equals(Object o)
"überladen"Ich bin mir nicht sicher, ob das Probleme macht, wenn ein Projekt nur mit JavaTX kompiliert wird, aber wenn man ein Hybridprojekt aus javac und javatx verwendet wird, beschwert sich der javac Kompiler, dass er die Methode nicht überschreiben kann, weil die Signatur abweicht.
Das ist ein interessantes Problem. Ich würde warscheinlich @Override in irgendeiner Form einführen, hier könnte dann überprüft werden ob primitive Datentypen verwendet werden müssen damit das Overriding klappt.
Ich denke auch die @Override Annotation zu verwenden wäre eine gute Lösung. So könnte der Compiler dann auch prüfen, ob alle abstrakten Funktionen der Superklasse/Interface auch wirklich implementiert werden. Aktuell wird man dazu nicht gezwungen
Wir sind jetzt so verblieben, dass wir das Ganze transparent machen. Also wenn in der Superklasse irgendwo eine Methode existiert die sich nur in der Verwendung von primitiven Typen unterscheidet, wird diese Methode überschrieben. JavaTX verwendet hier also die primitiven Typen.