我使用的是版本2.11.6的Scala-ide。在Java文件中,界面如下所示:
interface CSet extends Set<Comparable>, Comparable {
以前只需导入转化功能就可以了。
import scala.collection.JavaConversions._
所以我可以使用
for { x <- Some_CSet } ...
一切都很好。但我确实注意到代码无法通过sbt的编译器。突然间,那些也成为了ide中的错误:“flatMap不是CSet的成员”。我尝试了各种方式来编写自己的隐式转换并失败了。例如:
implicit def convert(s: CSet): Set[Comparable[_]] = {
val ss = MSet[Comparable[_]]()
val iter = s.iterator()
while (iter.hasNext) {
val nxt = iter.next()
ss.add(nxt)
}
ss
}
类型检出但存在运行时错误。
例如:
val cset = //some api from that package to get a CSet
for { e <- cset} println(e) //this seems to be stuck in a infi loop,
//but not in the implicit conversion
但是,以下不需要 flatMap 的代码与上面的转换完美配合。
val x = cset1 diff cset2 //where cset1 and cset2 will be eventually
//converted to scala sets
有人能给出解决方案吗?无论是隐式转换还是解释为什么ide都是这样的。