博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala使用match匹配类型出现的unreachable code问题
阅读量:5225 次
发布时间:2019-06-14

本文共 1183 字,大约阅读时间需要 3 分钟。

def getAs[T >: Null](id: JsonElement, field: T): T = field  match {    case s: Class[Long] => id.getAsLong.asInstanceOf[T]    case s: Class[Int] => id.getAsInt.asInstanceOf[T]    case s: Class[Float] =>     id.getAsFloat.asInstanceOf[T]    case s: Class[String] =>  id.getAsString.asInstanceOf[T]    case _ => throw new RuntimeException("cannot assign " + id + " to " + field)  }

以上就是使用的代码。结果总出现unreachable code警告。后来在 http://www.scala-lang.org/old/node/1045  看到说明了。原来scala的类型变量(classOf)在编译以后是不带类型的,看下面的代码

val x = classOf[String]

scala> x.isInstanceOf[Class[String]]

warning: there were unchecked warnings; re-run with -unchecked for details
res3: Boolean = true
scala> x.isInstanceOf[Class[Int]]   
warning: there were unchecked warnings; re-run with -unchecked for details
res4: Boolean = true

 

这说明使用Class[_]或者是classOf[_]操作之后,所有的结果(比如Class[Int]或者classOf[String])都成为同一个类型。 这样,就没有办法进行模式匹配。(match操作其实匹配的是类型)

 

怎么解决这个问题:

用if else的方式

 val result = if(clz == classOf[String] )

        Some(rs getString name)
    else if(clz == classOf[Int] ){
        Some(rs getInt name)
    else if(clz == classOf[Date] )
        Some(rs getDate name)
     else None
     result map (_.asInstanceOf[T])

 

转载于:https://www.cnblogs.com/daoyou/p/3890007.html

你可能感兴趣的文章
【原创】大数据基础之Zookeeper(4)应用场景
查看>>
静态变量数组实现LRU算法
查看>>
中文系统 上传file的input显示英文
查看>>
比callback更简洁的链式执行promise
查看>>
android permission
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 使用字体
查看>>
.net 文本框只允许输入XX,(正则表达式)
查看>>
[BSGS][哈希]luogu P3846 可爱的质数
查看>>
Python 第四十五章 MySQL 内容回顾
查看>>
iostat参数说明
查看>>
Python-Mac 安装 PyQt4
查看>>
实验2-2
查看>>
String,StringBuffer与StringBuilder的区别?? .
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
session token两种登陆方式
查看>>
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
android smack MultiUserChat.getHostedRooms( NullPointerException)
查看>>
实用的VMware虚拟机使用技巧十一例
查看>>
监控工具之---Prometheus 安装详解(三)
查看>>
不错的MVC文章
查看>>