Comment puis-je convertir des un java.util.Carte à scala.collection.immuable.Carte en Java?


Je trouve beaucoup de gens qui essaient de le faire, et qui posent des questions à ce sujet, mais la question est toujours répondue en termes de code scala. J'ai besoin d'appeler une API qui attend une scala.collection.immuable.La carte mais j'ai un java.util.Carte, comment puis-je convertir proprement de ce dernier vers le premier dans mon code java? Le compilateur n'est pas d'accord avec le sentiment qu'il s'agit d'une conversion implicite car il y apparaît lorsque je l'essaie!

Merci!

Author: NSA, 2014-06-25

1 answers

Obtenir une carte Scala immuable est un peu délicat car les conversions fournies par la bibliothèque collections renvoient toutes les conversions mutables, et vous ne pouvez pas simplement utiliser toMap car il a besoin d'un argument implicite que le compilateur Java bien sûr ne fournira pas. Une solution complète avec cet argument implicite ressemble à ceci:

import scala.collection.JavaConverters$;
import scala.collection.immutable.Map;

public class Whatever {
  public <K, V> Map<K, V> convert(java.util.Map<K, V> m) {
    return JavaConverters$.MODULE$.mapAsScalaMapConverter(m).asScala().toMap(
      scala.Predef$.MODULE$.<scala.Tuple2<K, V>>conforms()
    );
  }
}

Écrire des conversions en Java est un peu plus propre avec JavaConversions, mais du côté de Scala, tout le monde espère que ce morceau de merde sera déprécié comme dès que possible, donc je l'éviterais même ici.

 14
Author: Travis Brown, 2014-06-25 20:01:59