Scala泛型方法如何定义继承多个基类型的参数?
正确定义同时实现两个接口的类型参数
在Scala中,要限定类型参数T同时实现多个接口/特质,不能使用链式的<:语法(比如你写的T <: Flushable <: AutoCloseable)——这种写法表达的是T继承自Flushable,且Flushable本身继承自AutoCloseable,并非你需要的“T同时满足两个独立接口”的逻辑。
正确的写法是用with关键字组合多个接口:
def autoFlushClose[T <: Flushable with AutoCloseable, A](value: T)(cb: T => A): A = { autoClose(value) { value => autoFlush(value)(cb) } }
额外说明
T <: Flushable with AutoCloseable明确要求T必须是同时实现了Flushable和AutoCloseable的类型,这样就能保证value既可以调用flush()(来自Flushable),也能调用close()(来自AutoCloseable)。- 你原有的嵌套逻辑是合理的:外层
autoClose会在最后执行资源关闭,内层autoFlush会在回调执行完成后刷新缓冲区,最终执行顺序为:回调代码 →flush()→close(),符合资源处理的常规流程。
内容的提问来源于stack exchange,提问作者oleber
相关产品推荐
相关产品推荐

