Scala中ArrayBuffer报‘不接受此参数’错误的原因咨询
错误原因及解决方法
核心问题:命名冲突
你自定义了一个名为ArrayBuffer的object,这和你导入的scala.collection.mutable.ArrayBuffer重名了。Scala编译器会优先使用当前作用域内的同名标识符,所以代码里的ArrayBuffer(1,2,3,4,5)实际是在调用你自己定义的object ArrayBuffer,但这个自定义对象并没有提供接收这些参数的apply方法(也就是没有支持这种方式的实例创建逻辑),因此编译器报错“ArrayBuffer does not take this parameter”。
解决方法
有三种常见的修复方式:
重命名自定义对象
把你自己的object名字改成不冲突的,比如ArrayBufferDemo,修改后的代码如下:import scala.collection.mutable.ArrayBuffer; object ArrayBufferDemo { def main(args: Array[String]){ var ArrayBuffer1 = ArrayBuffer(1,2,3,4,5) ArrayBuffer1.foreach(println) } }使用全限定名引用标准库类
如果必须保留自定义object的名称,直接用完整路径指定标准库的ArrayBuffer:import scala.collection.mutable.ArrayBuffer; object ArrayBuffer { def main(args: Array[String]){ var ArrayBuffer1 = scala.collection.mutable.ArrayBuffer(1,2,3,4,5) ArrayBuffer1.foreach(println) } }导入时使用别名
导入标准库的ArrayBuffer时给它起一个别名,避免和自定义对象冲突:import scala.collection.mutable.{ArrayBuffer => MutableArrayBuffer}; object ArrayBuffer { def main(args: Array[String]){ var ArrayBuffer1 = MutableArrayBuffer(1,2,3,4,5) ArrayBuffer1.foreach(println) } }
内容的提问来源于stack exchange,提问作者Koushik
相关产品推荐
相关产品推荐

