Scala Java Error: le filtre de valeur n'est pas un membre de java.util.Map. Fonctionne en dehors de la classe
Je suis en train de revoir certaines Scala code dans Eclipse et courir dans cette erreur de compilation:
filtre de la valeur n'est pas un membre de java.util.Carte
import java.io.File
import com.typesafe.config._
class ConfigLoader {
def parseFile( confFile : File) {
val conf = ConfigFactory.parseFile(confFile).root().unwrapped();
for((k,v) <- conf; (dk, dv) = (k, v.toString())) config.param += (dk -> dv);
}
(config est un objet avec des "param" être une Carte de Chaîne:Chaîne de caractères)
Ce code a été tirer exactement de Main (), où il a bien fonctionné de la sorte:
object Main extends Logging {
def main(args: Array[String]) {
//code cropped for readability.
//config.param["properties"] is absolute path to a passed-in properties file.
val conf = ConfigFactory.parseFile(new java.io.File(config.param("properties"))).root().unwrapped();
for((k,v) <- conf; (dk, dv) = (k, v.toString())) config.param+=(dk -> dv);
comme vous pouvez le voir, le code est exactement le même. J'ai importé les mêmes bibliothèques. Tout ce que je suis en train de faire différentes en main maintenant est l'instanciation de ConfigLoader
et de l'appeler de la sorte:
cfgLoader.parseFile(config.param("properties"))
Les idées de ce que la cause de l'erreur par un simple mouvement de à une classe?
J'ai googlé l'erreur et il semble être assez générique.
source d'informationauteur dlite922
Vous devez vous connecter pour publier un commentaire.
S'avère que j'ai été absent un délicat d'importation, après tout:
import collection.JavaConversions._
à ne pas confondre avec
JavaConverters._
qui je n'ai avoir des.Espère que cela aide quelqu'un d'autre.
Le problème est que vous utilisez un java Carte qui permet de ne pas mettre en œuvre la monade de l'api (carte, flatMap, ...) nécessaires à l'utilisation de scala pour-de la compréhension.
Plus précisément, dans votre exemple, le compilateur se plaint de manquer
.filter
méthode. C'est parce que vous déballez chaque élément de la carte:(key, value) <- monad
au lieu d'une affectation directe, commeentry <- monad
. Mais même si vous n'utilisez affectation directe, il allait se plaindre du manque.map
ou.flatMap
. Voir cette réponse à "comment faire vous-mêmes pour les-de la compréhension conformes à la scala monade pour plus de détails sur l'api requis.La solution la plus simple à votre problème est de convertir vous java carte en scala carte à l'aide de:
L'importation comprend implicite qui ajoutent de la
.asScala
méthode de java carte