Puis-je utiliser un scala classe qui implémente une interface java de Java?
Je suis en train d'apprendre Scala et était curieux de savoir si il serait possible de:
- Créer un objet qui implémente une interface Java en Scala
- Compiler l'objet dans un fichier de classe et pot
- Utiliser l'objet de Java
Je veux mettre en œuvre une coutume lucene analyseur de requête en scala et être en mesure de laisser à d'autres l'accès à partir d'une application java.
Vous devez vous connecter pour publier un commentaire.
Je suppose que par "objet" vous fait dire "classe". Dans tous les cas, la réponse est oui, vous pouvez le faire. Vous aurez besoin de prendre avantage de la Scala/Java commune compilateur si vous voulez tout cela dans le même projet. Par exemple:
Puis en Scala:
Enfin, en Java de nouveau:
Si tous ces fichiers source sont dans le même projet, alors vous aurez envie de les compiler à l'aide de l'invocation de commandes:
La première commande appelle la Scala/Java commune compilateur pour compiler le Scala sources et juste assez de sources Java pour satisfaire les dépendances. La deuxième commande appelle le compilateur de Java avec le récemment compilé Scala classes sur le chemin de la classe.
J'ai mis en œuvre un custom
org.apache.solr.handler.RequestHandlerBase
et personnaliséorg.apache.solr.request.QueryResponseWriter
en Scala 2.8 avec Java 1.6.0 et Solr 1.4.0. Je ne suis pas sûr de la Lucene version Solr 1.4.0 est à l'aide, mais je suppose assez récente. De toute façon, j'ai emballé la catégorie fichiers générés par Scala dans un bocal et Solr a été en mesure de charger correctement. Donc ce que vous essayez de faire est possible.Je dirais que la principale chose à surmonter est de convertir à partir de Java les objets de collection comme
List
etVector
à la Scala objets de la collection et vice versa.scala.collection.JavaConversions
en Scala 2.8.0 sera probablement votre ami.Une autre chose, si vous avez besoin de remplacer une méthode comme getBooleanQuery, vous devrez peut-être ajouter
[_]
de faire Scala compiler (code non testé, mais comme il m'a fallu un certain temps pour comprendre ce genre de choses quand j'ai commencé à Scala, j'ai pensé partager):Edit:: encore Une chose à propos de l'articulation de la compilation. Daniel de l'information sur la façon de joint de la compilation est utile. Vous ne pouvez pas immédiatement besoin de ça, cependant, que très probablement, vous avez juste besoin d'avoir
scalac
connaître le chemin d'accès à la Lucene fichiers jar, puis le package de votre classe dans un nouveau pot, et vous avez votre fichier jar utilisé lors de l'exécution dans le déploiement de l'environnement.Oui c'est possible. Certains de la Scala (tels que des objets singleton) de compiler le code qui est difficile à utiliser à partir de Java, mais en utilisant Scala classes par le biais d'une interface Java est un moyen facile d'écrire du code compatible.
Quelques questions au sujet de Java interopérabilité sont répondu à http://www.scala-lang.org/faq/4 et dans le livre La programmation Scala. Cité de la FAQ: