Cela peut être fait en utilisant une enveloppe de conversion:Spring: Injecter une liste Scala
import scala.collection.JavaConversions._
object ListConverter {
def toScalaList(jlist: java.util.List[AnyRef]) = {
jlist.toList
}
}
qui utilise un implicit def asScalaBuffer
dans JavaConversions
pour retourner une liste Scala. Ensuite, je peux faire la injectable liste comme:
<bean id="someItems" class="my.package.ListConverter" factory-method="toScalaList">
<constructor-arg type="java.util.List">
<util:list>
<ref bean="itemOne"/>
<ref bean="itemTwo"/>
</util:list>
</constructor-arg>
</bean>
Je voudrais trouver un moyen plus propre de le faire
Je ne peux pas vraiment utiliser JavaConversions
directement comme un appel d'usine statique:
<bean id="someItems" class="scala.collection.JavaConversions" factory-method="asScalaBuffer">...</bean>
Puisqu'un implicit def
n'est pas vraiment une méthode statique dans un univers Java.
P.S. Pour le sortir du chemin .. Je sais qu'il y a beaucoup d'amateurs de config pilotés par annotation, mais je ne suis pas l'un d'eux, et ce n'est pas une solution que je cherche: J'aime mon XML pour Spring configs, et J'aime Spring à DI Scala
oui, fait le tour, je ne sais pas pourquoi il ne compilait pas avant, mais alors IntelliJ Scala plugin le fait parfois .. Une bonne idée de l'utilisation de Seq [A] au lieu de List [A] => ne préconise pas forcément un type de collection fort, mais dans mon cas, cela n'a pas vraiment d'importance qu'il s'agisse d'un List ou d'un Seq. Je vous remercie. –
tolitius