Scala中泛型类型的模式匹配
发布时间:2020-12-16 09:12:40 所属栏目:安全 来源:网络整理
导读:我有 scala功能,看起来像这样: 现在,根据T的类型(在我的情况下,它可以是Double,Boolean和LocalDate), 我需要在ob上应用函数.这样的东西(我知道代码将没有任何意义,但我正在努力表达我的意思) def X[T](ob: Observable[T]): Observable[T] = { //code T matc
我有
scala功能,看起来像这样:
现在,根据T的类型(在我的情况下,它可以是Double,Boolean和LocalDate), def X[T](ob: Observable[T]): Observable[T] = { //code T match { case Double => DoSomething1(ob:Observable[Double]):Observable[Double] case Boolean => DoSomething2(ob:Observable[Boolean]):Observable[Boolean] case LocalDate => DoSomething3(ob:Observable[LocalDate]):Observable[LocalDate] } } 考虑到Scala的Erasure财产,可以用某种方式来反思以完成工作吗?甚至有可能吗 解决方法
如果你在2.10,我会和TypeTag一起去
import reflect.runtime.universe._ class Observable[Foo] def X[T: TypeTag](ob: Observable[T]) = ob match { case x if typeOf[T] <:< typeOf[Double] => println("Double obs") case x if typeOf[T] <:< typeOf[Boolean] => println("Boolean obs") case x if typeOf[T] <:< typeOf[Int] => println("Int obs") } X(new Observable[Int]) // Int obs 参见this lengthy,but awesome answer 还要注意,我只是瞥见scala反射,所以可能有人会写一个更好的例子来说明TypeTag的用法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |