You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 02:54:58