Имам тип-параметризиран абстрактен клас, който съдържа 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)
}