Play Frameworkプロジェクトでは、RESTリクエストを処理するためのコントローラーがあります。例は次のとおりです。
object AddressBean extends Controller with RestTrait{
def list = Action {
val list = Addresses.findAll()
Ok(Json.toJson(list.map(s => Json.toJson(s)(AddressJson.addressWrites))))
}
def create = Action {
Ok("")
}
}
(コンパイルするためにOK( "")を置くだけであることに注意してください。listメソッドを実装したように、それらを実装する必要があります)。
これらすべてのRESTクラスに同じメソッドを実装するための特性を定義したいので、次のように始めました。
/**
* Define an interface for all of our REST classes.
*/
trait RestTrait extends Controller{
/**
* List entities.
*/
def list
/**
* Create entity. Get entity from request.body
*/
def create
//and so on
}
Unit does not take parameters
問題は、traitからのメソッドがAction returnタイプである必要があることを理解しているので、次のように定義することになるという警告を受け取ることです。
/**
* Define an interface for all of our REST classes.
*/
trait RestTrait extends Controller{
/**
* List entities.
*/
def list = Action{
Ok("")
}
/**
* Create entity. Get entity from request.body
*/
def create = Action{
Ok("")
}
//and so on
}
このような特性でメソッドを定義することを回避する方法はありませんか?それならoverride
クラスで使わなければならないからです。私は主にそれらの方法をしたくimplement
ないoverride
...