Scala 定义按类型从列表中筛选项目的方法
我正在尝试按项目类型筛选列表。工作代码如下:Scala 定义按类型从列表中筛选项目的方法,scala,types,Scala,Types,我正在尝试按项目类型筛选列表。工作代码如下: trait Action class AAA extends Action class BBB extends Action val list = List(new AAA, new BBB, new AAA) def find[T <: Action] = list.filter(_.isInstanceOf[T]) find[AAA] trait动作 AAA级扩展行动 类BBB扩展了操作 val list=列表(新AAA、新BBB
trait Action
class AAA extends Action
class BBB extends Action
val list = List(new AAA, new BBB, new AAA)
def find[T <: Action] = list.filter(_.isInstanceOf[T])
find[AAA]
trait动作
AAA级扩展行动
类BBB扩展了操作
val list=列表(新AAA、新BBB、新AAA)
def find[T您可以使用ClassTag
:
def find[T <: Action : ClassTag] =
list.filter{ implicitly[ClassTag[T]].runtimeClass.isInstance }
scala> find[AAA]
res0: List[Action] = List(AAA@145332ca, AAA@135cfef8)
使用隐式m:scala.reflect.Manifest[T]
def find[T <: Action](implicit m:scala.reflect.Manifest[T]) =
list.filter{x:Any => m.erasure.isInstance(x)}.asInstanceOf[List[T]]
def find[T m.erasure.isInstance(x)}.asInstanceOf[List[T]]
自版本2.10.0
以来,已弃用擦除。
list.collect{ case e: AAA => e }
def find[T <: Action](implicit m:scala.reflect.Manifest[T]) =
list.filter{x:Any => m.erasure.isInstance(x)}.asInstanceOf[List[T]]