我正在寻找一种方法来定义返回类型 T 的方法,其中 T = 子类的类型。
我知道我可以使用抽象类型来做到这一点,但不喜欢必须为每个子类重新定义 T 的开销。
一些示例代码:
object Helper {
def help[A <: MyClass](cls: A): Option[A] = { cls.foo() map { _.asInstanceOf[A] } }
}
class MyClass {
type T <: MyClass
def foo(): Option[T] = Some(this.asInstanceOf[T])
}
class ChildClass extends MyClass {
type T = ChildClass
}
也许新的语言功能使这变得更容易?或者我可以以某种方式使用 this.type 吗?对我来说很重要的是,我能够定义一个可以通过这种方式调用 foo 的帮助器类。
如果你总是回来this
,那么你确实可以将其作为返回类型this.type
。或者你已经尝试过了吗?
this.type
特别有用,例如当您想要链接对同一对象的调用,或提供静态保证以返回同一对象(而不是副本)时。例如,Buffer
Scala 中的 s 有追加操作:+
,它返回一个Buffer[A]
, and +=
,返回this.type
。前者复制可变序列;后者保证您更新原始对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)