Warnung zum reflektiven Zugriff des Strukturtyp-Members in Scala

9

Was bedeutet diese Warnung:

  

reflective Zugriff von Strukturtyp Member-Methode GetMap sollte aktiviert sein

Die Warnung enthält einen Verweis auf die Scala-Dokumente, aber ich verstehe nicht, wie mein Code mit der Erklärung zusammenhängt. (Speziell die Erklärung erwähnt Reflexion ... wie ist mein Code mit Reflexion?)

Ich habe folgendes: (Scala 2.11.2)

%Vor%

Dies erzeugt die folgende Warnung:

%Vor%     
Greg 06.11.2014, 19:31
quelle

1 Antwort

14

Ich denke, was passiert, ist, dass die new { ... } -Objekte strukturell typisiert sind, was eine zu implementierende Reflexion erfordert.

Der Grund dafür ist, dass die Scala-Struktur-Typisierung es ermöglicht, Objekte so zu behandeln, als ob sie Instanzen vieler Typen wären, je nachdem, welche Methoden sie tatsächlich haben (wie Enten-Typisierung). Die JVM erlaubt genau einen Typ, so dass Methoden, die nicht Teil des zugrunde liegenden Typs des Objekts sind, über etwas anderes als einen normalen virtuellen Methodenaufruf zugegriffen werden müssen. Der Mechanismus, der in diesem Fall verwendet wird, ist die Reflexion.

Wenn der scala-Compiler einen Aufruf einer Methode sieht, die an einem strukturell typisierten Objekt aufgerufen wird, übersetzt er (modulo einige Optimierungen) einen Methodenaufruf wie:

%Vor%

bis

%Vor%

Beispiel aus dem Ort, an dem die Technik beschrieben wurde .

Das Scala-Team hat sich entschieden, eine Einwilligungsrichtlinie für erweiterte Funktionen zu erzwingen, die möglicherweise nicht alle verwenden. reflectiveCalls ist einer von ihnen, wie in diesem SIP     

mrmcgreg 06.11.2014, 20:14
quelle

Tags und Links