我正在寻找一种方法来定义返回类型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的助手类对我很重要。
任何机会你可以指向一些特定的语法,因为我需要完全按照(使用类型参数)编写Helper.help? this.type不匹配A?另外,请注意我需要返回Option [this.type],并且def foo:Option [this.type] =有些(this)似乎没有编译。谢谢你的帮助! –
@Pandora Singleton类型永远不会被推断出来,你必须明确地指定它:'Some [this.type](this)'。 –
非常感谢!我遇到了另一个小故障,因为我的foo函数实际上调用另一个对象的静态方法 - >如果您有洞察力,请在这里跟进问题:) http://stackoverflow.com/questions/6886182/scala-this- type-conformance-to-type-parameter-bounds-super-type –