I Scala bin mit implicits eine reiche Wrapper für eine Java-Schnittstelle zu definieren:Factory-Methoden für die Implementierung von Java-Schnittstellen mit Scala implicits?
class RichThing { def richStuff: Unit = {} }
Im Begleitobjekt mir die implizite Konvertierung und eine apply
Factory-Methode zu definieren:
object RichThing {
implicit def rich(thing: JavaThing) = new RichThing()
def apply() = new RichThing()
}
Damit ich kann eine Java-Implementierung der Schnittstelle instanziieren und verwenden sie es wie ein RichThing
(aufgrund der impliziten Konvertierung):
new JavaThingImpl().richStuff
Ich kann auch erstellen RichThing
die Factory-Methode unter Verwendung von (aufgrund der apply
-Methode):
val a = RichThing()
Was ich möchte, ist frei wählbar Java-Implementierungen der Schnittstelle in der gleichen Art und Weise zu tun, instanziiert. Das funktioniert nicht, wie Scala dann für ein Begleitobjekt der Umsetzung sieht und nicht finden kann:
val b = JavaThingImpl() // "not found: value JavaThingImpl"
ich ein Scala Begleiter-Objekt für die Java-Implementierung schaffen könnte:
object JavaThingImpl { def apply() = new RichThing() }
Aber der Punkt wäre, dass dies für jede (insbesondere unbekannte) Implementierung der Schnittstelle funktioniert.
Gibt es eine Möglichkeit, dies zu realisieren? Zum Beispiel, um Scala Companion-Objekte für die Java-Implementierungen im laufenden Betrieb zu erstellen, basierend auf der impliziten Konvertierung im RichThing
Objekt?
Oder das Scala Companion-Objekt von der Java-Seite, vielleicht in einer abstrakten Klasse zu erstellen?