Ich habe heute einen Bug aufgespürt, und ich bemerkte etwas Seltsames in einer unserer Klassen. Ich schneide so viel Code wie möglich heraus hier posten:Wie unterscheidet Java diese verschiedenen Methoden mit demselben Namen/derselben Signatur?
class A {
static int obtainNumber() { return 42; }
static int obtainNumber() { return 3; }
static int obtainNumber() { return -1; }
static {
System.out.println(obtainNumber());
}
}
Diese Klasse hat drei Methoden mit exakt den gleichen Namen und Unterschrift. Zuerst dachte ich, das wäre ein ungültiger Code, aber dann hätte Eclipse den Code rot markiert. Es funktioniert:
Also dachte ich vielleicht Java wird nur die erste, die es sieht, verwenden. I neu geordnet Test:
class A {
static int obtainNumber() { return 3; }
static int obtainNumber() { return -1; }
static int obtainNumber() { return 42; }
static {
System.out.println(obtainNumber());
}
}
Nö, das gleiche Resultat:
javac A.java && java A
42
Exception in thread "main" java.lang.NoSuchMethodError: main
Ich dachte, vielleicht nutzt es den mit 42, weil seine größten. Um dies zu testen, nahm ich das Original und verändert die Rückgabewerte:
class A {
static int obtainNumber() { return 0; }
static int obtainNumber() { return 1; }
static int obtainNumber() { return 2; }
static {
System.out.println(obtainNumber());
}
}
Es weiß noch die erste zu verwenden:
javac A.java && java A
0
Exception in thread "main" java.lang.NoSuchMethodError: main
Und wenn ich sie neu ordnen wieder:
class A {
static int obtainNumber() { return 1; }
static int obtainNumber() { return 0; }
static int obtainNumber() { return 2; }
static {
System.out.println(obtainNumber());
}
}
Gleiches Ergebnis:
javac A.java && java A
0
Exception in thread "main" java.lang.NoSuchMethodError: main
Ich dachte, dass Java eine textbasierte Sprache ist, von der ich annehme, dass dies unmöglich ist. Wie läuft Java welche Methode welche ist?
Wenn Sie bemerken, ist derjenige, der mit der anderen Syntax hiliting von den anderen genommen wird. Vielleicht kann dich das aufgrund von versteckten Zeichen oder Grammatikquirlen auffallen. – hexafraction
Warum sollte jemand das tun? Es ist wie ein Zaubertrick, der auf dem Programmierer gespielt wird. – Shoe
@Jim von Batman The Dark Knight: * Manche Männer wollen einfach nur die Welt brennen sehen *. –