scala超类是否可以将其作为子类返回

scala超类是否可以将其作为子类返回,scala,Scala,因此,如何使方法返回子类类型,以便可以按任意顺序链接操作 到目前为止,我能想到的是 abstract class SuperClass { def method() = this } class SubClass1 extends SuperClass { def method1() = this } class SubClass2 extends SuperClass { def method2() = this } val obj1 = new SubClass1() obj

因此,如何使
方法
返回子类类型,以便可以按任意顺序链接操作

到目前为止,我能想到的是

abstract class SuperClass {
  def method() = this
}

class SubClass1 extends SuperClass {
  def method1() = this
}
class SubClass2 extends SuperClass {
  def method2() = this
}

val obj1 = new SubClass1()
obj1.method1().method() // this is ok
val obj2 = new SubClass2()
obj2.method().method2() // this is not ok, as method returns a SuperClass, 
                        // which has no method named method2

抽象类超类[T类似的东西应该可以工作:

abstract class SuperClass[T <: SuperClass[T]]

像这样的方法应该会奏效:

abstract class SuperClass[T <: SuperClass[T]]

我发现以下方法同样有效:

abstract class SuperClass {
  def method(): this.type = this
}

抽象类超类[T我发现以下方法同样有效:

abstract class SuperClass {
  def method(): this.type = this
}

抽象类超类[T它是有效的,你能告诉我如何在java中实现这一点吗?java中没有等价物。你必须在每个子类中重写
method
,你能告诉我如何在java中实现这一点吗?java中没有等价物。你必须在每个子类中重写
method
,这取决于你的意思是“工作”:)这在运行时会严重破坏,比如
类Foo扩展超类[SubClass]
或者只
新的超类[SubClass]()。方法
@Dima应该是
类Foo扩展超类[Foo]
,第二种情况不能像
超类那样工作
抽象的
。这有点取决于“工作”的确切含义:)这在运行时与
类Foo扩展超类[子类]
或新的超类[子类]().method
@Dima它应该是
类Foo扩展超类[Foo]
,第二种情况不能作为
超类
抽象的