Bytecode für Lambda-Audrücke als implementierung der Functional Interface funktioniert nicht #113
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
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: JavaTX/JavaCompilerCore#113
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?
Branch: targetBytecode
commit:
c51190feef
Testcases: LambdaRunnable.jav
FunctionalInterface.jav
Also ich bekomme als Resultat der Typinferenz das hier:
RESULT Final: [[(R =. Fun0$$, 0 WC: true, IT: false), (T =. void, 0 WC: true, IT: false), (S =. void, 0 WC: true, IT: false), (P =. void, 0 WC: false, IT: false), (YI =. void, 0 WC: false, IT: false), (N =. void, 0 WC: true, IT: false)]]
-> R =. Fun0$$
Müsste ich hier nicht Runnable bekommen damit der Rest funktioniert?
Ist es nicht so, dass es generell das Problem gibt, dass Fun0 kein Subtyp von Runnable ist?
Also das ist eine Einschränkung im Typinferenzalgorithmus.
Man müsste für funktionale Interfaces so eine Art Structural Subtyping einführen.
Genau den Subtyp habe ich jetzt in das FC integriert!
Also Fun0 ist ein Subtyp von Runnable.
(In reply to Daniel Holle from comment #1)
Aha, ja dann ist das das Problem!
lam hat ja den richtigen Typ reicht das nicht?
import java.lang.Runnable;
import java.lang.String;
import java.lang.System;
public class LamRunnable{
}
Dieses prpgramm liefert bei auch einen Fehler!
Ich glaube void als generischer Parameter funktioniert nicht. Ich schaus mir an. Müsste es nicht Fun0$$ ohne den Parameter sein?
Das Beispiel funktioniert jetzt.