Zwei Methoden mit der gleichen Signatur, warum es funktioniert

8

Ich habe eine Klasse, die Strings als Sammlung behandelt. Dies sind zwei Methoden aus der Klasse:

%Vor%

Nur die Signatur aus den Methoden ist relevant für meine Frage. Jetzt gibt Eclipse eine Warnung aus, dass die beiden Methoden die gleiche Löschung haben. Aber es erlaubt mir immer noch, sie zu erstellen, und sie funktionieren wie erwartet: Immer wenn ich eine Funktion zur Verfügung stelle, die Zeichen in Zeichen umwandelt, wird ein RichString zurückgegeben, wie ich es wollte.

Meine Frage ist, warum es funktioniert, da zur Laufzeit keine Informationen über die generischen Typen vorhanden sind und die Rückgabe der Methode nicht Teil der Methodensignatur ist? Wie kann die JVM wissen, welche der beiden Methoden aufgerufen werden soll, wenn ich sie anrufe?

Bearbeiten:

Ich denke, nach der Löschung würden die beiden Methoden die folgende Signatur haben:

%Vor%

Was würde sie unterscheiden sich nur durch den Rückgabetyp.

    
Vinicius Seufitele 07.05.2013, 11:56
quelle

2 Antworten

2

Sie haben Recht, dass dies nicht kompiliert werden sollte. Es gibt einen Fehler in Java 6, der dazu führte, dass Code wie dieser falsch akzeptiert wurde: Ссылка

    
David 08.05.2013, 00:17
quelle
1
  1. Die Laufzeitumgebung enthält viele Informationen über generische Typen, wenn es um Klassen- / Methoden-Signaturen geht, nur nicht, wenn es um Objektinstanzen geht. Die gesamte Signatur der zweiten Überladung kann wahrscheinlich durch Reflexion abgerufen werden.
  2. Es spielt keine Rolle, weil Methodenüberladungen sowieso zur Kompilierungszeit aufgelöst werden. Es ist möglich, dass die Mehrdeutigkeit dort aufgelöst wird, z. der Compiler berücksichtigt die zweite Überladung "spezifischer" für einen Parameter vom Typ Function<Character, Character> .
millimoose 07.05.2013 12:09
quelle

Tags und Links