クラスの機能をカプセル化したいとしましょう。つまり、クライアントとこの特定のクラスの間にプロキシを導入したいとします。例えば、プレイのResult
クラスには、次の方法があります。この特定のクラスを変更せずに機能を持つScalaクラスを拡張するには?
/**
* Adds headers to this result.
*
* For example:
* {{{
* Ok("Hello world").withHeaders(ETAG -> "0")
* }}}
*
* @param headers the headers to add to this result.
* @return the new result
*/
def withHeaders(headers: (String, String)*): Result = {
copy(header = header.copy(headers = header.headers ++ headers))
}
はのは、私が直接このメソッドを使用する必要はありませんが、代わりに私はプロキシを使用したいと仮定しましょう。どのようにこれを実装することができ
Redirect(controllers.app.routes.Application.index).customWithHeaders(<XYZ>)
:?だからではなく、Redirect(controllers.app.routes.Application.index).withHeaders(<XYZ>)
を呼び出すので、私はその後、.withHeaders(<XYZ>)
を呼び出し、自分自身のメソッドを呼び出したいですかコントローラによって拡張される特性を実装することでこれを行うことができますか?スコープでResultUtilsと
助けてくれてありがとう!この「暗黙のクラス」をカプセル化して再利用可能にするうーん、簡単な方法はありますか?私はこれを使いたいコントローラを複数持っています。私はそれを形質で包むべきだと思いますよね? –
@ジョンドーはい。これをパッケージオブジェクトの中に入れ、好きな場所にパッケージをインポートします – pamu
@JohnDoeは 'package object solution'で答えを編集しました – pamu