我刚刚找到它in the API,并希望看到一个或两个示例以及说明它的优点。
最佳答案
代理特征为创建委托(delegate)提供了有用的基础,但是请注意,它仅提供Any
(equals
,hashCode
和toString
)中方法的实现。您将必须自己实现任何其他转发方法。代理通常与pimp-my-library pattern一起使用:
class RichFoo(val self: Foo) extends Proxy {
def newMethod = "do something cool"
}
object RichFoo {
def apply(foo: Foo) = new RichFoo(foo)
implicit def foo2richFoo(foo: Foo): RichFoo = RichFoo(foo)
implicit def richFoo2foo(richFoo: RichFoo): Foo = richFoo.self
}
标准库还包含一组特征,这些特征对于创建集合代理(
SeqProxy
,SetProxy
,MapProxy
等)很有用。最后,在scala孵化器中有一个编译器插件(AutoProxy plugin),它将自动实现转发方法。另请参见this question。