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]]