Передача аргументов анонимным внутренним классам - PullRequest
1 голос
/ 07 июня 2010

Я пытаюсь создать библиотеку 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 Ответ

3 голосов
/ 07 июня 2010

Похоже ли следующее на то, что вы хотите?


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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...