我有一个类型参数化的抽象类,它包含一个 val 和一个都使用其类型参数的方法
abstract class Foo[T](val state: T){
def foo(arg: T){
...
}
}
我还有一个扩展这个抽象类并提供类型参数和 state
值的类
class Bar(myNumber: Int) extends Foo[Int](myNumber){
...
}
我传递了一个 Bar
的实例到另一个接受 Foo
的任何子类的类,我想调用方法 foo
在 state
,但我遇到了一些麻烦:
class Baz(val f: Foo[_]){
f.foo(f.state)
}
这给出了错误:
<console>:8: error: type mismatch;
found : Baz.this.f.state.type (with underlying type _$1)
required: _$1
f.foo(f.state)
有没有办法给Baz
知识Bar
的类型参数以便正确编译?或者这就是我想要做的?
编辑
澄清一下,我有很多类似于 Bar
的类延伸 Foo
并提供自己的类型参数、状态和 foo
的实现.我希望我图书馆的用户能够将它们中的任何一个传递给 Baz
不用担心类型参数 T
因为它只是 Foo
的每个子类的实现细节.
所以我强烈建议不要这样做:
class Baz[T](val f: Foo[T]){
f.foo(f.state)
}
最佳答案
你只需要一个
def fooOnState[T](ft: Foo[T]) = ft.foo(ft.state)
用 Foo[_]
调用它是可以的。
尽管如此,大多数时候最好避免存在性,但这取决于您的实际代码。
关于scala - 如何在 Scala 中访问类的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23858615/