Scala -必须扩展多个基类型的泛型方法参数

w8f9ii69  于 2023-03-23  发布在  Scala
关注(0)|答案(1)|浏览(110)

我想有一个方法,实现2个接口的参数,一个例子可以看到以下:

def autoClose[T <: AutoCloseable, A](closeable: T)(cb: T => A): A = {
    try {
      cb(closeable)
    } finally {
      closeable.close()
    }
  }

  def autoFlush[T <: Flushable, A](flushable: T)(cb: T => A): A = {
    try {
      cb(flushable)
    } finally {
      flushable.flush()
    }
  }

有一个这样的方法是合乎逻辑的:

def autoFlushClose[T <: Flushable <: AutoCloseable, A](value: T)(cb: T => A): A = {
    autoClose(value) { value =>
      autoFlush(value)(cb)
    }
  }

如何定义T类型?

svmlkihl

svmlkihl1#

使用compound types

def autoFlushClose[T <: Flushable with AutoCloseable, A](
    value: T
)(cb: T => A): A = {
  autoClose(value) { value =>
    autoFlush(value)(cb)
  }
}

或者Scala 3版本:

def autoFlushClose[T <: Flushable & AutoCloseable, A](
    value: T
)(cb: T => A): A = {
  autoClose(value) { value =>
    autoFlush(value)(cb)
  }
}

相关问题