Subtyping mit Java-TX Funktionstypen #337
Loading…
x
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?
Laut dem DHBW Insights sollten die Argumente der Funkionstypen automatisch immer Kontravariant und der Rückgabewert Kovariant sein. Der Code kompiliert auch wie ich es erwarten würde, daher gehe ich aus, dass das Feature bereits Implementiert ist, im Bytecode gibt es aber einen Fehler, wodurch zur Laufzeit eine Exception fliegt.
Beispiel
Wenn ich diese Klasse nun über eine Main Klasse aufrufe, fliegt eine ClassCastException zur Laufzeit.
Exception in thread "main" java.lang.ClassCastException: class Variance$$Lambda/0x000071f1dc001000 cannot be cast to class Fun1$$Ljava$lang$Number$$Ljava$lang$Number$$ (Variance$$Lambda/0x000071f1dc001000 and Fun1$$Ljava$lang$Number$$Ljava$lang$Number$$ are in unnamed module of loader 'app')
at Variance.main(Unknown Source)
at Main.main(Main.java:4)
Hier der Bytecode der main Funktion. Das Problem ist wohl der Typecast bei
14:
.Ich glaube das Problem ist, dass beide Variablen jeweils den kompletten Funktionstyp als Typ bekommen.
Da müssen wir nochmal drüber sprechen, bin mir nicht ganz sicher was korrekt wäre.
Da in JavaTX-Bytecode dann tasächlich implizit
ein Subtyp von
ist
müsste man wahrscheinlich einen Cast einfügen (s.u.)
Das Problem ist, dass ich momentan wann immer
Fun1$$<Number, Number>
kommt das ganze direkt inFun1$$Ljava$lang$Number$_$Ljava$lang$Number$_$
übersetze. Ich glaube es gibt momentan gar keine Entsprechung für die erste Variante.Man muss in jedes Interface
FunN$$Typ$_$...$_$
alle Superinferfaces eintragen