Mam abstrakcyjną klasę:scala metoda rodzajowa nadrzędnymi
abstract class Foo(...){
def bar1(f : Foo) : Boolean
def bar2(f : Foo) : Foo
}
wiele klas przedłużenia Foo i zastąpić Metody
class FooImpl(...) extends Foo{
override def bar1(f : Foo) : Boolean {
...
}
override def bar2(f : Foo) : Foo {
...
}
}
to jest możliwe, przy użyciu rodzajowych (lub coś), aby metody nadrzędne mieć typ właściwości podklasy, która go implementuje? Tak:
class FooImpl(...) extends Foo{
override def bar1(f : FooImpl) : Boolean {
...
}
override def bar2(f : FooImpl) : FooImpl {
...
}
}
Myślałam coś wzdłuż linii następujących, ale nie wydają się działać ...
abstract class Foo(...){
def bar1[T <: Foo](f : T) : Boolean
def bar2[T <: Foo](f : T) : T
}
class FooImpl(...) extends Foo{
override def bar1[FooImpl](f : FooImpl) : Boolean {
...
}
override def bar2[FooImpl](f : FooImpl) : FooImpl{
...
}
}
Każda pomoc jest mile widziane!
Dziękuję.
pozwoliło to co zamierzałem do zrobienia. Tak więc używając "type T <: Foo", tworzę typ T, który jest albo Foo lub dowolną z jego podklas, i mogę wtedy użyć tego typu w klasie, jak każdy inny typ, gdziekolwiek chcę. Jako parametr, typ zmiennej, wartość zwracana, ... Prawidłowe? Dziękuję Ci bardzo. Na marginesie; Jestem mile zaskoczony szybkością odpowiedzi na to stanowisko. Czapki z głów :-) –
Masz rację. –