我需要限制Scala方法参数,以便它实现特征和结构子类型。我怎么能这样做?
trait Foo
// ...
def someMethod[A <: Foo xxx { def close() }](resource: A)(block: A => Unit) {
// ...
}
我应该用xxx
代替什么?我尝试了extends
和with
,但语法错误。
是否可以使用结构子类型的type
定义来完成?
答案 0 :(得分:7)
是的,您可以使用type
:
type CanBeClosed = {def close()}
def someMethod[A <: Foo with CanBeClosed](resource: A)(block: A => Unit) {
// ...
}
最近我还撰写了类似主题的帖子:
http://hacking-scala.posterous.com/composing-your-types-on-fly
答案 1 :(得分:6)
我实际上不确定,如果这与tenshi建议的相同,但是它会编译,所以试试吧......
def someMethod[A <: Foo { def close() }](resource: A)(block: A => Unit) {
// ...
}