将参数传递给匿名内部类

时间:2010-06-07 04:53:43

标签: scala

我正在尝试为我们的Web服务创建一个API库,我想知道是否可以这样做:

abstract class UserRequest(val userId: Int) {
  def success(message: String)
  def error(error: ApiError)
}

api.invokeRequest(new UserRequest(121) {
  override def success(message: String) = {
    // handle success
  }

  override def error(error: ApiError) = {
    // handle the error
  }
}

我所说的是将参数传递给匿名内部类,并且还要覆盖这两种方法。

我是非常新的Scala,我意识到我的语法可能完全错误。在我开始编码之前,我只是想为这个库设计一个好的设计。

如果我以完全错误的方式做这件事,或者有更好的方法,我愿意为此提出建议。

这个想法是API将采用某种请求对象,使用它通过http在线程中发出请求,并且当响应已经发出时,如果请求成功,则以某种方式向呼叫者发出信号或一个错误。请求/错误函数必须在主线程上执行。

1 个答案:

答案 0 :(得分:3)

以下内容是否符合您的要求?


scala> abstract class UserRequest(val userId: Int) {
         def success(message: String)
         def error(error: String)
       }

scala> trait Api {def invokeRequest(r: UserRequest): Unit}

api: java.lang.Object with Api = $anon$1@ce2db0

scala> val api = new Api {
         def invokeRequest(r: UserRequest) = {
            //some request handling here...., always successful in our case
            if (true) r.success("succeeded") else r.error("failed")
         } 
       }


scala> api.invokeRequest(new UserRequest(121) {
          def success(message: String) = println("user request 121 got success: " + message)

          def error(error: String) = println("user 121 request got error: " + error)
})
user request 121 got success: succeeded