在Scala中将类限制为特征和结构子类型

时间:2011-12-08 17:12:52

标签: scala subtype

我需要限制Scala方法参数,以便它实现特征和结构子类型。我怎么能这样做?

trait Foo
// ...
def someMethod[A <: Foo xxx { def close() }](resource: A)(block: A => Unit) {
  // ...
}

我应该用xxx代替什么?我尝试了extendswith,但语法错误。

是否可以使用结构子类型的type定义来完成?

2 个答案:

答案 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) {
  // ...
}