0

Ich bin neu in Scala und impliziten Konvertierungen.Wie überschreiben Sie eine implizite Funktion des Companion-Objekts?

Ich arbeite mit einer vorhandenen Scala-Bibliothek, über die ich keine Kontrolle habe. Betrachten wir eine Klasse R aus der Bibliothek.

Ich erweitere die Klasse R, um fast ihr ganzes Verhalten zu überschreiben. Aber diese neue Klasse ist eine Java-Klasse. Lassen Sie sich diesen A. nennt

class A extends R { 

} 

Problem ist, an einem gewissen Punkt in meinem Steuerfluss, springt die Steuerung auf die implizite Deklaration für R und endet RFunctions Klasse für jede Funktion verwenden.

Die Methoden, die in RFunctions vorhanden sind, sind auch in meiner erweiterten Klasse A implementiert. Ich verstehe nicht, wie ich die implizite Konvertierung umgehen oder vermeiden kann.

Irgendwelche Ideen würden geschätzt.

+0

hmm ... 'implizit' in Java? Wenn Sie es in Java übersetzen, übersetzen Sie es vollständig. Sie werden keine einfache Möglichkeit finden, implicits in Java zu verwenden. –

+0

Wenn Ihre Klasse A alle RFunction-Methoden hat, werden sie aufgerufen, bevor eine implizite Konvertierung angewendet wird. –

+0

Sie können nicht. An einigen Stellen des Codes, besonders in der externen Bibliothek, ist der statische Typ einer Variablen R, obwohl sie zur Laufzeit tatsächlich A ist. Daher wird die implizite Konvertierung trotzdem stattfinden, egal was Sie tun, weil der Compiler ist nicht allwissend genug, um etwas anderes abzuleiten. Und tatsächlich gibt es keine typisierende Beziehung zwischen RFunktionen und R. Sie können RFOfunction-Methoden nicht aus einer Unterklasse von R "implementieren", da sie separate Entitäten sind, die zufällig durch eine Konvertierungsmethode verbunden sind. – HTNW

Antwort

0

Extend abstract class R mit abstract class Rbis in Scala und in Begleiter object Rbis definieren die impliziten Funktionen, die Sie benötigen, dann in Java erweitern Sie Rbis (sie werden vor denen in R in unserem Fall genannt werden).

Verwandte Themen