Bytecode für Lambda-Audrücke als implementierung der Functional Interface funktioniert nicht #113

Closed
opened 2023-10-27 19:28:18 +00:00 by pl · 7 comments
Owner

Branch: targetBytecode
commit: c51190feef

Testcases: LambdaRunnable.jav
FunctionalInterface.jav

Branch: targetBytecode commit: c51190feef04cdb8b25ef5340e455e409b82b5e5 Testcases: LambdaRunnable.jav FunctionalInterface.jav
Owner

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?

Also ich bekomme als Resultat der Typinferenz das hier: RESULT Final: [[(R =. Fun0$$<void>, 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$$<void> Müsste ich hier nicht Runnable bekommen damit der Rest funktioniert?
Owner

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.

Ist es nicht so, dass es generell das Problem gibt, dass Fun0<void> 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.
Author
Owner

Genau den Subtyp habe ich jetzt in das FC integriert!
Also Fun0 ist ein Subtyp von Runnable.

Genau den Subtyp habe ich jetzt in das FC integriert! Also Fun0<void> ist ein Subtyp von Runnable.
Author
Owner

(In reply to Daniel Holle from comment #1)

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?

Aha, ja dann ist das das Problem!
lam hat ja den richtigen Typ reicht das nicht?

(In reply to Daniel Holle from comment #1) > Also ich bekomme als Resultat der Typinferenz das hier: > > RESULT Final: [[(R =. Fun0$$<void>, 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$$<void> > > Müsste ich hier nicht Runnable bekommen damit der Rest funktioniert? Aha, ja dann ist das das Problem! lam hat ja den richtigen Typ reicht das nicht?
Author
Owner

import java.lang.Runnable;
import java.lang.String;
import java.lang.System;

public class LamRunnable{

public LamRunnable(){


	lam = () -> {var a;};
	//lam.run();
}

}

Dieses prpgramm liefert bei auch einen Fehler!

import java.lang.Runnable; import java.lang.String; import java.lang.System; public class LamRunnable{ public LamRunnable(){ lam = () -> {var a;}; //lam.run(); } } Dieses prpgramm liefert bei auch einen Fehler!
Owner

Ich glaube void als generischer Parameter funktioniert nicht. Ich schaus mir an. Müsste es nicht Fun0$$ ohne den Parameter sein?

Ich glaube void als generischer Parameter funktioniert nicht. Ich schaus mir an. Müsste es nicht Fun0$$ ohne den Parameter sein?
Owner

Das Beispiel funktioniert jetzt.

Das Beispiel funktioniert jetzt.
Sign in to join this conversation.
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: JavaTX/JavaCompilerCore#113
No description provided.