tra*_*ory 1 collections scala generic-collections scala-java-interop scala-collections
我需要使用以下方法使用java-legacy代码:
public void doit(Map <String, Object> vals) {...}
Run Code Online (Sandbox Code Playgroud)
我的Scala代码:
var map = new java.util.HashMap[String, Any]
map += "testme" -> 'X'
doit(map)
Run Code Online (Sandbox Code Playgroud)
yield =>
类型不匹配; found:java.util.HashMap [String,Any] required:java.util.HashMap [java.lang.String,java.Object]
所以我把它改成:
var map = new java.util.HashMap[java.lang.String, Object]
map += "testme" -> 'X'
doit(map)
Run Code Online (Sandbox Code Playgroud)
yield =>
类型不匹配; found:需要Char:java.lang.Object注意:原始类型不会隐式转换为AnyRef.你可以通过施放x.asInstanceOf [AnyRef]来安全地强制拳击.
最后我想出了以下内容:
var map = new java.util.HashMap[java.lang.String, Object]
map += "testme" -> 'X'.asInstanceOf[AnyRef]
doit(map)
Run Code Online (Sandbox Code Playgroud)
是否有更简洁的方法来解决这个问题?
没有内置的方法来缩短它,但你可以编写一个辅助方法:
def jkv(s: String, a: Any) = s -> a.asInstanceOf[AnyRef]
map += jkv("testme",'X')
Run Code Online (Sandbox Code Playgroud)
或者使用pimp-my-library模式添加一个为您执行此操作的新运算符
class StringArrow(s: String) {
def ~>(a: Any) = s -> a.asInstanceOf[AnyRef]
}
implicit def string_has_arrow(s: String) = new StringArrow(s)
map += "testme" ~> 'X'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6174 次 |
| 最近记录: |