我想为内部类实现丰富的库模式,该模式适用于外部类的任何实例。像这样的东西:
class Outer {
class Inner(val x: Option[Inner] = None) {
def test(y: Inner) {}
}
}
implicit class ExtInner(inner: Outer#Inner) {
def get = inner.x.get
}
val outer = new Outer
val inner = new outer.Inner(Some(new outer.Inner))
inner.test(inner.get)
由于类型不匹配,此代码将无法编译:get
返回类型为Outer#Inner
但test
期望的对象outer.Inner
。
我有两种方法可以让它发挥作用,但都涉及asInstanceOf
我想避免的使用。第一个只是简单地将结果get
转换为outer.Inner
:
inner.test(inner.get.asInstanceOf[outer.Inner])
第二个更通用一些,并且在ExtInner
:
implicit class ExtInner[T <: Outer#Inner](inner: T) {
def get = inner.x.get.asInstanceOf[T]
}
有没有更好的方法来丰富内部类,这样就不需要进行强制转换了?