apache flink-Scala:每个作用域中的对象都是相同的单例对象吗?


0

我有一份申请书。我在map函数中使用了一个对象。这样地:

.map(value => {
    import spray.json._
    import com.webtrekk.sObjects._
    import com.webtrekk.jsonProtocol._
    import com.webtrekk.salesforce._

implicit val effortProcessing = streamProcessor.Effort
implicit val effortConsulting = effortConsultingFormat
var effort = value.toString.parseJson.convertTo[effortConsulting]

streamProcessor.Effort.mapping(
    value.toString.parseJson.convertTo[effortConsulting]
)

effort

})

streamProcessor是一个对象。在这个对象内部是数据库的另一个服务对象。每次应用程序遇到事件时,Flink都会执行此 map函数。我想知道的是:这个对象每次都是相同的单例对象吗?

例如:

->事件到达应用程序-> map函数将执行并创建一个单例对象

->应用程序的下一个事件-> map函数将再次执行->

第二个对象是相同的实例吗?

1 答案


0

是和否。对象是其作用域内的单例对象:

scala> List(1, 2).map(i => { object foo { def bar: Int = i }; foo }).map(_.bar)
res2: List[Int] = List(1, 2)

这意味着以下内容大致相当:

object foo extends Thing { ... }
lazy val foo = new Thing { ... }

在您的例子中,因为对象是在map函数之外声明的,所以每次都是同一个实例。


我来回答

写文章

提问题

面试题