如何初始化类型别名的空映射
How to initialize empty map that has been type aliased
通常我一直以这种方式声明地图,因为我需要它是空的
var myMap: mutable.Map[String, ListBuffer[Objects]] = mutable.Map[String, ListBuffer[Objects]]()
对象类型签名很长,所以我试图在如下所示的包对象中声明我自己的类型别名。
type MyMapType = mutable.Map[String, ListBuffer[Objects]]
问题是当我尝试使用别名声明我的地图时它似乎不起作用。
var myMap: MyMapType = MyMapType()
我收到一条错误消息
Expression of type ListBuffer[Objects] doesn't conform to expected type MyPackageObject.MyMapType
试试这个:
import collection.mutable.{Map, ListBuffer}
type MyMapType = Map[String, ListBuffer[Object]]
var myMap: MyMapType = Map()
之所以有效: Map()
是 Map.apply()
的快捷方式。这是对名为 Map
的对象的方法调用。它是 mutable.Map
的伴随对象。它的名字属于一组完全独立的标识符:类型的名字独立于对象的名字。因此,伴生对象 Map
仍称为 Map
。请注意,由于类型推断,您可以省略 .apply()
的所有类型参数。
要编写类似 MyMapType()
的内容,除了类型之外,还需要伴生对象的别名:
val MyMapType = mutable.Map
对于这种情况,这不是很理想,但是
var myMap: MyMapType = MyMapType()
会起作用。不幸的是,
var myMap = MyMapType() // or MyMapType.empty
不会。你真正需要的是
object MyMapType {
// define the methods you want, e.g.
def apply(items: (String, ListBuffer[Object])*): MyMapType = Map(items: _*)
def empty: MyMapType = Map.empty
// etc
}
当然你可以定义一个返回这样的方法"companion objects".
作为旁注,您通常有 var
或可变集合,两者一起应该很少见。
通常我一直以这种方式声明地图,因为我需要它是空的
var myMap: mutable.Map[String, ListBuffer[Objects]] = mutable.Map[String, ListBuffer[Objects]]()
对象类型签名很长,所以我试图在如下所示的包对象中声明我自己的类型别名。
type MyMapType = mutable.Map[String, ListBuffer[Objects]]
问题是当我尝试使用别名声明我的地图时它似乎不起作用。
var myMap: MyMapType = MyMapType()
我收到一条错误消息
Expression of type ListBuffer[Objects] doesn't conform to expected type MyPackageObject.MyMapType
试试这个:
import collection.mutable.{Map, ListBuffer}
type MyMapType = Map[String, ListBuffer[Object]]
var myMap: MyMapType = Map()
之所以有效: Map()
是 Map.apply()
的快捷方式。这是对名为 Map
的对象的方法调用。它是 mutable.Map
的伴随对象。它的名字属于一组完全独立的标识符:类型的名字独立于对象的名字。因此,伴生对象 Map
仍称为 Map
。请注意,由于类型推断,您可以省略 .apply()
的所有类型参数。
要编写类似 MyMapType()
的内容,除了类型之外,还需要伴生对象的别名:
val MyMapType = mutable.Map
对于这种情况,这不是很理想,但是
var myMap: MyMapType = MyMapType()
会起作用。不幸的是,
var myMap = MyMapType() // or MyMapType.empty
不会。你真正需要的是
object MyMapType {
// define the methods you want, e.g.
def apply(items: (String, ListBuffer[Object])*): MyMapType = Map(items: _*)
def empty: MyMapType = Map.empty
// etc
}
当然你可以定义一个返回这样的方法"companion objects".
作为旁注,您通常有 var
或可变集合,两者一起应该很少见。