加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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),
我需要在ob上应用函数.这样的东西(我知道代码将没有任何意义,但我正在努力表达我的意思)

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的用法.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读