如何scala.collection.JavaConversions
取代Stack Overflow问题中的答案迭代Scala中的Java集合(它不起作用,因为"jcl"软件包已经消失了)和迭代使用Scala的Map(它在复杂的测试中对我不起作用)我将尝试归结并在此后发布).
后者实际上是一个Scala Map问题,但我想我需要知道这两个答案才能迭代java.util.Map
.
我想使用Apache POI在Scala应用程序中读取/创建Excel文件.当然,我可以直接使用POI库,毕竟它是Java,但我想让Scala感觉到.那么是否有一个Scala包装器带来了Scala的感觉(使用隐式转换),即某种"Scala-POI-DSL"免费提供?
我试图使用asInstanceOf将java列表转换为Scala列表但没有成功,因为我从android调用返回的列表是一个java列表.
val apList = (wfm.getScanResults:java.util.List[ScanResult])
Run Code Online (Sandbox Code Playgroud)
希望这样做,以便我可以使用(新的Scala)列表进行理解,因为它似乎不喜欢在这个构造中使用java列表给我一个错误.
value foreach is not a member of java.util.List[android.net.wifi.ScanResult]
for (ap<-apList) { .... }
^
Run Code Online (Sandbox Code Playgroud)
他们是一种在for/foreach中使用Java列表而不强制它的方法吗?如果我必须胁迫,怎么样?as asInstanceOf以这种方式使用时调用ar/t错误.
我正在尝试实现包装数学Java函数的泛型函数。为简单起见,我们可以假定Java函数(Java 7)接受一个参数并返回结果,均为java.lang.Double类型。当然,包装器函数应该带有一个参数和一个结果,它们都是通用类型但为数字类型A。问题是我无法在包装器函数中将结果强制转换回类型A。问题出在哪里/什么地方?
注意:(我是Scala的新手,并使用以下参考资料来解决该问题。)
package test
object mytest {
def f[A](x: A)(implicit num: Numeric[A]): A = {
val result = new java.lang.Double(num.toDouble(x))
result.asInstanceOf[A]
}
def main(args: Array[String]) {
// 'Some code'
}
}
Run Code Online (Sandbox Code Playgroud)
result val result = f(3)
Run Code Online (Sandbox Code Playgroud)
输出:
Exception in thread "main" java.lang.ClassCastException: java.lang.Double cannot be cast to java.lang.Integer
at scala.runtime.BoxesRunTime.unboxToInt(BoxesRunTime.java:105)
at test.mytest$.main(test.scala:10)
at test.mytest.main(test.scala)
Run Code Online (Sandbox Code Playgroud)
println(f(3))
Run Code Online (Sandbox Code Playgroud)
输出:
3.0
Run Code Online (Sandbox Code Playgroud)
println(f(3).getClass)
Run Code Online (Sandbox Code Playgroud)
输出:
int
Run Code Online (Sandbox Code Playgroud)
package test …
Run Code Online (Sandbox Code Playgroud) 如果可能,我将如何从java中循环ListBuffer.ListBuffer的初始化(在scala中)
var newModVersions: ListBuffer[NewModVersionEntry] = new ListBuffer[NewModVersionEntry]()
Run Code Online (Sandbox Code Playgroud)
当前智能for循环(在java中)
for (VersionCheckHandler.NewModVersionEntry entry : XplosionCoreBL.newModVersions())
Run Code Online (Sandbox Code Playgroud)