Переопределение универсального метода scala

У меня есть абстрактный класс:

abstract class Foo(...){
   def bar1(f : Foo) : Boolean
   def bar2(f : Foo) : Foo
}

несколько классов расширяют Foo и переопределяют методы

class FooImpl(...) extends Foo{
    override def bar1(f : Foo) : Boolean {
        ...
    }
    override def bar2(f : Foo) : Foo {
        ...
    }
} 

Возможно ли, используя дженерики (или что-то в этом роде), чтобы методы переопределения имели тип параметра подкласса, реализующего его? Примерно так:

class FooImpl(...) extends Foo{
    override def bar1(f : FooImpl) : Boolean {
        ...
    }
    override def bar2(f : FooImpl) : FooImpl {
        ...
    }
}

Я думал примерно следующее, но это, похоже, не сработало ...

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{
       ...
    }
}

Любая помощь приветствуется!

Спасибо.

19
задан Jannik Luyten 7 January 2011 в 15:09
поделиться