Was wird aus x <?. y #278

Open
opened 2023-07-03 17:59:48 +00:00 by pl · 1 comment
Owner

class Pair<T, U> {
T x;
U y;

public Pair() { }
public Pair(T x, U y) {
	this.x = x;
	this.y = y;
}

public T fst () {
	return x;
}

public U snd () { 
	return y;
}

}

public class PairArg {
CW id(CW x) {
return x;
}

 <LTB, HLG, DA> Pair<HLG, DA> m1(Pair<? extends HLG, LTB> x, DA y) {
	var help = m2(x, y);
    var y2 = help.snd();
    var x2 = id(x.fst());
    return new Pair<>(x2,y2);
}

<LTB, HLG, ET> Pair<HLG, ET> m2(Pair<? extends HLG, LTB> x, ET y) {
    var help = m1(x, y);
    var x2 = help.fst();
    var y2 = id(y);
    return new Pair<>(x2, y2);
}

}

In dem Beuspiel wird jeweils m1(Pair<HLG, LTB> x, DA y) bzw.
m2(Pair<HLG, LTB> x, ET y) inferiert. Vermutlich kommt dies durch die Ungleichung X <?. Y. Welche Lösunegn gibt es?
X =. ? extends a, Y =. ? extends b, und a <. b
X =. ? super a, Y =. ? super b, und b <. a

class Pair<T, U> { T x; U y; public Pair() { } public Pair(T x, U y) { this.x = x; this.y = y; } public T fst () { return x; } public U snd () { return y; } } public class PairArg { <CW> CW id(CW x) { return x; } <LTB, HLG, DA> Pair<HLG, DA> m1(Pair<? extends HLG, LTB> x, DA y) { var help = m2(x, y); var y2 = help.snd(); var x2 = id(x.fst()); return new Pair<>(x2,y2); } <LTB, HLG, ET> Pair<HLG, ET> m2(Pair<? extends HLG, LTB> x, ET y) { var help = m1(x, y); var x2 = help.fst(); var y2 = id(y); return new Pair<>(x2, y2); } } In dem Beuspiel wird jeweils m1(Pair<HLG, LTB> x, DA y) bzw. m2(Pair<HLG, LTB> x, ET y) inferiert. Vermutlich kommt dies durch die Ungleichung X <?. Y. Welche Lösunegn gibt es? X =. ? extends a, Y =. ? extends b, und a <. b X =. ? super a, Y =. ? super b, und b <. a
Owner

Kurze Anmerkung, hat nicht unbedingt was mit dem Bug zu tun.

Der Methodentyp:
<LTB, HLG, ET> Pair<HLG, ET> m2(Pair<? extends HLG, LTB> x, ET y)

könnte doch auch vereinfacht werden zu:
<LTB, HLG, ET> Pair<HLG, ET> m2(Pair<HLG, LTB> x, ET y)

Der Generic HLG kommt ja nur einmal vor und ist frei wählbar.
Daher ist doch der Type Pair<HLG, LTB> nicht weniger einschränkend als Pair<? extends HLG, LTB>

Kurze Anmerkung, hat nicht unbedingt was mit dem Bug zu tun. Der Methodentyp: <LTB, HLG, ET> Pair<HLG, ET> m2(Pair<? extends HLG, LTB> x, ET y) könnte doch auch vereinfacht werden zu: <LTB, HLG, ET> Pair<HLG, ET> m2(Pair<HLG, LTB> x, ET y) Der Generic HLG kommt ja nur einmal vor und ist frei wählbar. Daher ist doch der Type Pair<HLG, LTB> nicht weniger einschränkend als Pair<? extends HLG, LTB>
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 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#278
No description provided.