métodos de fábrica para implementações de Java interaja, envolvido com implícitos Scala?

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

Pergunta

Eu estou usando implícitos Scala para definir um invólucro rico para uma interface Java:

class RichThing { def richStuff: Unit = {} }

No objeto companheiro I definir a conversão implícita e um método apply fábrica:

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

Com isso, posso instanciar uma implementação Java da interface e usá-lo como um RichThing (devido à conversão implícita):

new JavaThingImpl().richStuff

Eu também pode criar um RichThing usando o método de fábrica (devido ao método apply):

val a = RichThing()

O que eu gostaria de fazer é instanciar implementações arbitrária Java da interface da mesma forma. Isso não funciona, como Scala, em seguida, olha para um objeto companheiro da implementação e não pode encontrar um:

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

Eu poderia criar um objeto companheiro Scala para a implementação Java:

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

Mas o ponto seria fazer esta obra para qualquer (em particular desconhecido) implementação da interface.

Existe alguma maneira de realizar isso? Por exemplo, para criar objetos de companhia Scala para as implementações de Java na mosca, com base na conversão implícita no objeto RichThing?

Ou para criar o objeto companheiro Scala do lado de Java, talvez em uma classe abstrata?

Foi útil?

Solução

Não, isso não é possível em Scala. Provavelmente seria possível adicioná-lo à linguagem sem comprometer tipo de solidez, mas eu questão de saber se a complexidade adicional seria pena.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top