Lokale Variablen müssen bei Überladung beachtet werden #64

Open
opened 2020-02-08 09:34:17 +00:00 by pl · 0 comments
Owner

OverloadingTIMain.jav:

import java.util.Vector;
import java.util.Stack;

class OverloadingTIMain {
void main() {
var v;
new O1().mm(v);
}
}

mit O1.java:

import java.util.Vector;
import java.util.Stack;

public class O1 {

public <T> String mm(Stack<T> x) { return "S"; }
  
  public <T> String mm(Vector<T> x) { return "V"; }

}

liefert

class OverloadingTIMain {

void main()({
TPH K v;
(new O1().mm((v)::TPH K))::TPH M;
return;
})::TPH O

OverloadingTIMain()({
super(());
})::TPH R

RESULT Final: [
[(TPH L = java.util.Vector), (TPH M = java.lang.String), (TPH N = O1), (TPH MDI, TPH MDH), (TPH K = java.util.Vector)],
[(TPH L = java.util.Stack), (TPH N = O1), (TPH MDK, TPH MDJ), (TPH K = ? extends java.util.Stack), (TPH M = java.lang.String)]]

Es wird aber nur eine Methode main generiert:

javap OverloadingTIMain.class
Compiled from "OverloadingTIMain.jav"
class OverloadingTIMain {
public OverloadingTIMain();
public void main();
}

Da ist offen welchen Typ K hat. Dies ist aber eintscheidend für die ausgewählte Methode aus O1.

OverloadingTIMain.jav: import java.util.Vector; import java.util.Stack; class OverloadingTIMain { void main() { var v; new O1().mm(v); } } mit O1.java: import java.util.Vector; import java.util.Stack; public class O1 { public <T> String mm(Stack<T> x) { return "S"; } public <T> String mm(Vector<T> x) { return "V"; } } liefert class OverloadingTIMain { void main()({ TPH K v; (new O1().mm((v)::TPH K))::TPH M; return; })::TPH O OverloadingTIMain()({ super(()); })::TPH R RESULT Final: [ [(TPH L = java.util.Vector<TPH MDH>), (TPH M = java.lang.String), (TPH N = O1), (TPH MDI, TPH MDH), (TPH K = java.util.Vector<TPH MDH>)], [(TPH L = java.util.Stack<TPH MDJ>), (TPH N = O1), (TPH MDK, TPH MDJ), (TPH K = ? extends java.util.Stack<TPH MDJ>), (TPH M = java.lang.String)]] Es wird aber nur eine Methode main generiert: > javap OverloadingTIMain.class Compiled from "OverloadingTIMain.jav" class OverloadingTIMain { public OverloadingTIMain(); public void main(); } Da ist offen welchen Typ K hat. Dies ist aber eintscheidend für die ausgewählte Methode aus O1.
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 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#64
No description provided.