外側のクラスの任意のインスタンスで機能する内側のクラスに、enrich-my-library パターンを実装したいと考えています。このようなもの:
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
ます。
それを機能させるには2つの方法がありますが、どちらもasInstanceOf
避けたい使用を伴います。get
最初のものは単に to の結果をキャストすることですouter.Inner
:
inner.test(inner.get.asInstanceOf[outer.Inner])
2 番目はもう少し一般的で、キャストを次のように行いExtInner
ます。
implicit class ExtInner[T <: Outer#Inner](inner: T) {
def get = inner.x.get.asInstanceOf[T]
}
キャストを行う必要がないように、内部クラスを充実させるより良い方法はありますか?