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

scala:类似于map的结构,在获取值时不需要强制转换?

发布时间:2020-12-16 10:01:48 所属栏目:安全 来源:网络整理
导读:我正在编写一个转换数据库查询结果的数据结构.原始结构是一个 java ResultSet,它将被转换为一个映射或类,它允许通过命名方法调用或将字符串传递给apply()来访问该数据结构上的不同字段.显然,不同的值可能具有不同的类型.为了减轻这个数据结构的客户端的负担,
我正在编写一个转换数据库查询结果的数据结构.原始结构是一个 java ResultSet,它将被转换为一个映射或类,它允许通过命名方法调用或将字符串传递给apply()来访问该数据结构上的不同字段.显然,不同的值可能具有不同的类型.为了减轻这个数据结构的客户端的负担,我的首选是不需要转换数据结构的值,但是获取的值仍然具有正确的类型.

例如,假设我正在执行一个获取两个列值的查询,一个是Int,另一个是String.结果然后列的名称分别是“a”和“b”.一些理想的语法可能如下:

val javaResultSet = dbQuery("select a,b from table limit 1")

// with ResultSet,particular values can be accessed like this:
val a = javaResultSet.getInt("a")
val b = javaResultSet.getString("b")
// but this syntax is undesirable. 

// since I want to convert this to a single data structure,// the preferred syntax might look something like this:
val newStructure = toDataStructure[Int,String](javaResultSet)("a","b")

// that is,I'm willing to state the types during the instantiation
// of such a data structure.

// then,val a: Int = newStructure("a") // OR
val a: Int = newStructure.a

// in both cases,"val a" does not require asInstanceOf[Int].

我一直在试图确定哪种数据结构可能允许这种情况,而我无法找到解决方案.

另一个要求显然是我想定义用于所有数据库查询的单个数据结构.我意识到我可以轻松地定义一个案例类或类似的每个调用,并解决了键入问题,但是当编写许多数据库查询时,这样的解决方案不能很好地扩展.我怀疑有些人会建议使用某种ORM,但让我们假设我最好以字符串的形式维护查询.

有人有什么建议吗?谢谢!

解决方法

Joschua Bloch介绍了一个异构集合,可以用Java编写.我曾经采用过一点.它现在可用作值寄存器.它基本上是两个地图的包装器.这是 code,这是 how你可以使用它.但这只是FYI,因为您对Scala解决方案感兴趣.

在Scala中,我将从玩Tuples开始.元组是异类集合.结果可以是,但不必通过_1,_2,_3等字段访问.但你不想要那个,你想要名字.这是您可以为这些名称分配名称的方法:

scala> val tuple = (1,"word")
tuple: ([Int],[String]) = (1,word)

scala> val (a,b) = tuple
a: Int = 1
b: String = word

所以如前所述,我会尝试围绕元组构建一个ResultSetWrapper.

(编辑:李大同)

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

    推荐文章
      热点阅读