以下は、Scala2.9ではだめでScala2.10限定です *1 *2 implicit class RichAny[A](val self: A) extends AnyVal{ def as[B <: A : Manifest]: Option[B] = self match { case x: B => Some(x) case _ => None } } ちょっとC# っぽい(?) 使い方は以下のような感じ scala> class A defined class A scala> class B extends A defined class B scala> val b: A = new B b: A = B@42bab86d scala> b.as[B] res0: Option[B] = Some(B@42bab86d) もうちょっと工夫のやりようがありそうなので、なにか