2010-06-07 137 views
0

我試圖讓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在線程中發出請求,並且當響應已經發生時,如果請求成功則以某種方式發回給調用者或者一個錯誤。請求/錯誤函數必須在主線程上執行。

回答

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 = [email protected] 

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