代码之家  ›  专栏  ›  技术社区  ›  synic

向匿名内部类传递参数

  •  1
  • synic  · 技术社区  · 14 年前

    我正在尝试为我们的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
      }
    }
    

    我说的是将参数传递给匿名内部类,并重写这两个方法。

    我是

    如果我完全错了,或者有更好的方法,我愿意接受建议。

    其思想是,API将获取某种请求对象,使用它通过http在线程中发出请求,当做出响应时,以某种方式向调用者发回成功或错误的信号。请求/错误函数必须在主线程上执行。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Arjan Blokzijl    14 年前

    下面这些看起来像你想要的吗?

    
    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