Factory-Methoden für Implementierungen von Java-Schnittstellen mit Scala implicits eingewickelt?

StackOverflow https://stackoverflow.com/questions/514428

Frage

Ich bin mit Scala implicits eine reiche Wrapper für eine Java-Schnittstelle zu definieren:

class RichThing { def richStuff: Unit = {} }

Im Begleitobjekt definiere ich die implizite Konvertierung und eine apply Factory-Methode:

object RichThing { 
    implicit def rich( thing: JavaThing ) = new RichThing() 
    def apply() = new RichThing()
}

Damit kann ich eine Java-Implementierung der Schnittstelle instanziieren und verwenden Sie es wie ein RichThing (aufgrund der impliziten Konvertierung):

new JavaThingImpl().richStuff

Ich kann auch eine RichThing schaffen die Factory-Methode (aufgrund der apply-Methode):

val a = RichThing()

Was Ich mag würde zu tun ist, beliebige Java-Implementierungen der Schnittstelle in der gleichen Art und Weise instanziiert. Das funktioniert nicht, wie Scala dann für ein Begleitobjekt der Umsetzung sieht und nicht finden können:

val b = JavaThingImpl() // "not found: value JavaThingImpl"

Ich könnte ein Scala Begleiter-Objekt für die Java-Implementierung erstellen:

object JavaThingImpl { def apply() = new RichThing() }

Aber der Punkt wäre diese Arbeit für alle zu machen (insbesondere unbekannt) Implementierung der Schnittstelle.

Gibt es eine Möglichkeit, dies zu realisieren? Zum Beispiel Scala Begleiter Objekte für die Java-Implementierungen auf der Fliege, auf der Grundlage der impliziten Umwandlung im RichThing Objekt zu erstellen?

oder das Scala Begleiter Objekt aus der Java-Seite zu erstellen, vielleicht in einer abstrakten Klasse?

War es hilfreich?

Lösung

Nein, das ist in Scala nicht möglich. Es wäre wahrscheinlich möglich sein, ohne Kompromisse bei Typ Solidität der Sprache zu schreiben, aber ich Frage, ob die zusätzliche Komplexität es sich lohnen würde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top