gpt4 book ai didi

generics - 编写接受具有特定方法的对象的方法的语法

转载 作者:行者123 更新时间:2023-12-01 07:08:02 25 4
gpt4 key购买 nike

我想写一个通用的辅助方法:

def using(closeable: [B has close() method], callback: [B has close() method] => A): A {
try {
callback(closeable)
} finally {
closeable.close()
}
}

目的是我可以将它与任何具有 close() 方法的东西一起使用:
using(new FileInputStream(...)) {
stream => stream.read()
}

using(dataSource.getConnection) {
conn => using(conn.createStatement()) {
statement => using(statement.executeQuery("...")) {
rs => rs.getString(1)
}
}
}

我正在寻找的是它的命名方式,这样我就可以自己搜索语法和语法本身。

最佳答案

全给

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) }

输出:

i is 3

closed

关于generics - 编写接受具有特定方法的对象的方法的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7985825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com