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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |