我正在尝试为我们的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在线程中发出请求,并且当响应已经发出时,如果请求成功,则以某种方式向呼叫者发出信号或一个错误。请求/错误函数必须在主线程上执行。
答案 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