Generics 用于编写接受具有特定方法的对象的方法的语法
我想编写一个通用帮助器方法:Generics 用于编写接受具有特定方法的对象的方法的语法,generics,scala,Generics,Scala,我想编写一个通用帮助器方法: def using(closeable: [B has close() method], callback: [B has close() method] => A): A { try { callback(closeable) } finally { closeable.close() } } 其目的是我可以将其用于任何具有close()方法的对象: 我要寻找的是它的命名方式,这样我就可以自己搜索语法和语法本身。这被称为结构类型
def using(closeable: [B has close() method], callback: [B has close() method] => A): A {
try {
callback(closeable)
} finally {
closeable.close()
}
}
其目的是我可以将其用于任何具有close()方法的对象:
我要寻找的是它的命名方式,这样我就可以自己搜索语法和语法本身。这被称为结构类型。Debilski是对的,它的语法应该是
可关闭:{def close()}
编辑:这里有一个链接,指向基于对象及其应用方法而要使用的备选方案。以提供完整信息
type Closeable = {def close() }
def using[A,B](a: A with Closeable)(f: A => B) =
try { f(a) } finally { a.close() }
(您也可以编写A{def close()}
而不是A with Closeable
)
测试:
case class X(i: Int) { def close() = println("closed") }
using(X(3)){x => println("i is " + x.i) }
输出:
我3岁
封闭的
case class X(i: Int) { def close() = println("closed") }
using(X(3)){x => println("i is " + x.i) }