Scala erlaubt den Aufruf von java.util.HashMap get Methode mit der falschen Anzahl von Parametern

8

Ausführen des folgenden Codes in einer interaktiven Scala-Konsole

%Vor%

gibt das folgende

zurück %Vor%

Ich würde erwarten, dass dieser Code zu einem Compilerfehler über die falsche Anzahl von Parametern im Aufruf der get-Methode in allen außer dem ersten Aufruf führt. Warum wird das erfolgreich kompiliert und null zurückgegeben?

    
Robert Thompson 02.12.2014, 21:48
quelle

1 Antwort

12

Die Java-Map ist nicht typsicher, insbesondere hat die Methode get diese Signatur:

%Vor%

Sie können also alles als Schlüssel verwenden. In Scala sehen Sie das sogenannte Auto-Tupling, was in Scala 2.11 veraltet ist. Wenn Sie also Ihr Projekt mit -deprecation kompilieren, sehen Sie:

%Vor%

Sie können das mit dem Compiler-Flag -Xfuture in einen Fehler umwandeln:

%Vor%

Auto-tupling bedeutet, dass map.get() als map.get(()) behandelt wird und map.get("key1", "key2") als map.get(("key1", "key2")) behandelt wird.

Ich empfehle die Verwendung von Scala-eigenen Sammlungsarten, es sei denn, Sie haben einen besonderen Grund, dies nicht zu tun.

    
0__ 02.12.2014, 22:05
quelle

Tags und Links