Scala 转换和类型擦除
有没有更好的方法来编写这段代码?特别是,是否可以在外部函数中考虑转换Scala 转换和类型擦除,scala,Scala,有没有更好的方法来编写这段代码?特别是,是否可以在外部函数中考虑转换 nodes collect { case x: InstrumentSource[_] if (x.m <:< implicitly[ClassManifest[BarClose]]) => x.asInstanceOf[InstrumentSource[BarClose]] }; 节点是各种仪器源的集合。我的想法是: trait HasClassManifest[A] { def m: ClassMa
nodes collect { case x: InstrumentSource[_] if (x.m <:< implicitly[ClassManifest[BarClose]]) => x.asInstanceOf[InstrumentSource[BarClose]] };
节点是各种仪器源的集合。我的想法是:
trait HasClassManifest[A] {
def m: ClassManifest[A]
}
object <-< {
def apply[A : ClassManifest](a: HasClassManifest[_]): Boolean = {
a.m <:< classManifest[A]
}
}
case class InstSource[A](implicit m: ClassManifest[A]) extends HasClassManifest[A]
Seq(InstSource[Long],InstSource[Double]) collect {
case x if <-<[Long](x) => println("long")
case x if <-<[Double](x) => println("double")
}
trait hassclassmanifest[A]{
defm:ClassManifest[A]
}
对象不确定这是否有很大帮助,但是隐式[ClassManifest[BarClose]]
可以缩短为ClassManifest[BarClose]
@missingfaktor谢谢,我在回答中使用了它!
trait HasClassManifest[A] {
def m: ClassManifest[A]
}
object <-< {
def apply[A : ClassManifest](a: HasClassManifest[_]): Boolean = {
a.m <:< classManifest[A]
}
}
case class InstSource[A](implicit m: ClassManifest[A]) extends HasClassManifest[A]
Seq(InstSource[Long],InstSource[Double]) collect {
case x if <-<[Long](x) => println("long")
case x if <-<[Double](x) => println("double")
}