如何在Scala REPL中默认使用Scala List而非java.util.List
如何在Scala REPL中导入java.util._后默认使用Scala的List?
我之前也踩过这个坑!当你导入java.util._之后,Scala REPL会把List优先解析成Java的java.util.List——但这玩意儿是个接口,根本不能直接用List(...)的方式实例化,所以才会弹出那个“object java.util.List is not a value”的错误。下面给你几个实用的解决办法:
方法1:显式导入Scala的List,覆盖通配符导入优先级
直接在导入java.util._之后,显式导入Scala的不可变List,因为显式导入的优先级高于通配符导入,这样List就会默认指向Scala的版本:
scala> import java.util._ scala> import scala.collection.immutable.List scala> val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102) dup: List[Int] = List(1, 1, 1, 2, 3, 4, 5, 5, 6, 100, 101, 101, 102)
方法2:给Scala的List起别名,避免混淆
如果需要同时使用Java和Scala的集合,给Scala的List起个简洁的别名会更清晰:
scala> import java.util._ scala> import scala.collection.immutable.List as ScalaList scala> val dup = ScalaList(1,1,1,2,3,4,5,5,6,100,101,101,102) dup: List[Int] = List(1, 1, 1, 2, 3, 4, 5, 5, 6, 100, 101, 101, 102)
方法3:启动REPL时预先设置默认导入
如果不想每次进入REPL都手动导入,启动Scala REPL时可以加上参数,预先把Scala的List设为默认:
scala -import scala.collection.immutable.List
这样不管你之后有没有导入java.util._,直接写List(...)都会默认调用Scala的不可变List。
错误场景回顾
你之前遇到的报错情况是这样的:
scala> import java.util._ scala> val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102) <console>:35: error: object java.util.List is not a value val dup = List(1,1,1,2,3,4,5,5,6,100,101,101,102) ^
内容的提问来源于stack exchange,提问作者stack0114106
相关产品推荐
相关产品推荐

