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