【发布时间】:2015-11-05 11:32:28
【问题描述】:
我有一个值无参数方法,我想用另一个使用更高种类的类型构造函数的方法重载它。我还想在方法体中使用类型构造函数参数。我也想捕获类标签。这是我认为应该是可能的:
trait SomeContainer[+A]
trait Foo[+A]
class SomeClass {
// The simple variant
def method[T <: AnyRef]: Foo[T]
// Now the overloaded higher-kinded variant
def method[F[T <: AnyRef : Manifest] <: SomeContainer[T]]: Foo[T] = {
val classTag = manifest[T]
// Do something with it
}
}
但是我在这里根本无法访问T。这里的目的是使这里的高级方法重载非高级方法def method[T <: AnyRef]: Foo[T]。我是否达到了语言的限制?非高级方法签名是否过于开放,导致编译器无法区分两者之间的歧义?对于这种类型参数的重载模式,是否有更好的更惯用的方法?
【问题讨论】:
标签: scala generics overloading higher-kinded-types