所以,有一个特定的类,我在某个框架中重写(不相关,但它是Play的SecureSocial框架)。我覆盖的方法有签名:
在Scala中:
override val providers : scala.collection.immutable.ListMap[scala.Predef.String, securesocial.core.IdentityProvider] = { /* compiled code */ }
所以,我只是把它写成:
@Override
ListMap<String, IdentityProvider> providers() { ... }
问题是我用Java ListMap
做的唯一事情就是:
new ListMap<>();
哪个不是很有用。我要覆盖的Map
是通过DI注入的,而我所拥有的是java.util.HashMap
。所以,我的方法看起来像这样:
@Override
ListMap<String, IdentityProvider> providers() {
Map<String, IdentityProvider> providerMap = this.providerMap;
toScalaListMap(providerMap);
}
当然,toScalaListMap
不存在。我该怎么写呢?我尝试过在线搜索并查看scala文档,但鉴于我现在对Scala一无所知,我不知道从哪里开始。我在这个问题中添加了securesocial
标签以防万一。
答案 0 :(得分:1)
scala docs here中详细介绍了Java集合中可用的asScala
方法。只需在您的收藏中调用它就可以为您进行转换。
答案 1 :(得分:0)
我解决这个问题的方法是使用这样的东西:
return (ListMap<String, IdentityProvider>)new ListMap<String, IdentityProvider>()
.newBuilder()
.$plus$eq(new Tuple2<>("provider1", provider1))
.$plus$eq(new Tuple2<>("provider2", provider2))
.result();
Tuple2
基本上是scala.Tuple2
。这很难看,但它确实有效!