我试图弄清楚是否可以使用类型推断来处理传入的复杂对象类型.Test范围之外的对象是我无法控制的。目前我必须专门定义我正在使用的泛型(条形类型)。
trait Martini[A]
trait Foo[A <: Martini[A]] {
def foo(): A
}
class Bar extends Martini[Bar] {
def whoAmI = "Bar"
}
object Bar extends Foo[Bar] {
override def foo(): Bar = new Bar()
}
object Test extends App {
// val bar: Bar = test(Bar) // Want to do this, but doesn't work
val bar: Bar = test[Bar, Bar.type](Bar) // Works
println(bar.whoAmI)
def test[A <: Martini[A], F <: Foo[A]](f: F): A = {
f.foo()
}
}
我评论出来的是我想要实现的目标。谢谢你的帮助。
答案 0 :(得分:1)
通常,没有必要引入像F
这样的类型参数,它只用作参数类型一次。它可以简化为
def test[A <: Martini[A]](f: Foo[A]): A = {
f.foo()
}
这也将在这里修复类型推断。