【发布时间】:2018-01-17 09:18:27
【问题描述】:
如下我定义了一个 MapModel 类和它的伴生对象。
class MapModel(val map: Map[String, Double])
object MapModel {
implicit def MapToMapModel(map: Map[String, Double]) = new MapModel(map)
def apply(map: Map[String, Double]) = new MapModel(map)
/**
* weighted sum
*
* @param other
* @param weight
* @return
*/
def +*(other: MapModel, weight: Double): MapModel = {
???
}
def test(): Unit ={
}
}
我想创建一个 MapModel 实例并调用 +* 方法。但是无法找到伴随对象中的所有方法。
例如,我有一个jm 实例,它是一个Map[String,Double],
MapModel(jm).test()
产生错误,说
值测试不是 MapModel 的成员
【问题讨论】:
-
应直接访问伴随对象的成员,如
MapModel.test() -
那么伴生对象不是类的实例吗?
-
伴生对象是类的单例实例。
MapModel(jm)调用伴生对象的apply()方法,在这种情况下,它是一个返回MapModel实例的工厂方法。由于test()是对象上的方法,而不是类,所以不能在工厂方法的返回值上调用它。
标签: scala