我想将我的 java 映射转换为 Scala 不可变映射,我有一个示例代码,可以在 Scala 2.12 中正常工作,但在 Scala 2.13 中失败。
设置
untitled14\build.sbt
name := "untitled14"
version := "0.1"
scalaVersion := "2.12.13"
Run Code Online (Sandbox Code Playgroud)
untitled14\project\build.properties
sbt.version = 1.4.1
Run Code Online (Sandbox Code Playgroud)
untitled14\src\main\java\Main.java
import scala.Predef;
import scala.Tuple2;
import scala.collection.JavaConverters;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
Map<Integer, String> javaMap = new HashMap<>();
javaMap.put(1, "java");
javaMap.put(2, "scala");
javaMap.put(3, "js");
System.out.println("Java map -> " + javaMap);
scala.collection.immutable.Map<Integer, String> scalaMap = JavaConverters
.mapAsScalaMapConverter(javaMap)
.asScala()
.toMap(Predef.<Tuple2<Integer, String>>conforms());
System.out.println("Scala map -> " + scalaMap); …Run Code Online (Sandbox Code Playgroud) 我正面临这个与 Scala 隐式解析相关的奇怪问题
这是代码片段
import scala.collection.Factory
import scala.collection.immutable.Seq
sealed trait A
sealed trait B
case class BImpl() extends B
case class AImpl() extends A
object implicitsContainer {
type AB = (A, B)
implicit def toStringAnyTuples[C[X] <: Iterable[X], A <: AB]
(col: C[A])
(implicit factory: Factory[(String, Any), C[(String, Any)]])
: C[(String, Any)] = {
factory.fromSpecific(col.iterator.map(f => f._1.toString -> f._2))
}
}
object Main extends App {
import implicitsContainer._
def a(f: Seq[(String, Any)]): Seq[(String, Any)] = f
val w: Seq[(AImpl, BImpl)] = …Run Code Online (Sandbox Code Playgroud)