java - 将集合类型从 scala 转换为 java 的问题

标签 java scala cassandra hector

我正在使用 hector HOM 库访问我的 cassandra 数据存储。这个库是用 java 编写的,在使用 Collections 时使用了一些反射。

我有一个 java 模型,其中包含我要检索的字符串列表。不幸的是我得到以下异常:

Execution exception [[HectorObjectMapperException: exception while instantiating Collection type, scala.collection.JavaConversions$SeqWrapper]]

Caused by: me.prettyprint.hom.cache.HectorObjectMapperException: exception while instantiating Collection type, scala.collection.JavaConversions$SeqWrapper
    at me.prettyprint.hom.CollectionMapperHelper.instantiateCollection(CollectionMapperHelper.java:87) ~[hector-object-mapper-3.0-02.jar:na]
    at me.prettyprint.hom.HectorObjectMapper.createObject(HectorObjectMapper.java:297) ~[hector-object-mapper-3.0-02.jar:na]
    at me.prettyprint.hom.HectorObjectMapper.getObject(HectorObjectMapper.java:105) ~[hector-object-mapper-3.0-02.jar:na]
    at me.prettyprint.hom.EntityManagerImpl.find(EntityManagerImpl.java:132) ~[hector-object-mapper-3.0-02.jar:na]
Caused by: java.lang.InstantiationException: scala.collection.JavaConversions$SeqWrapper
    at java.lang.Class.newInstance0(Class.java:340) ~[na:1.6.0_29]
    at java.lang.Class.newInstance(Class.java:308) ~[na:1.6.0_29]
    at me.prettyprint.hom.CollectionMapperHelper.instantiateCollection(CollectionMapperHelper.java:75) ~[hector-object-mapper-3.0-02.jar:na]
    at me.prettyprint.hom.HectorObjectMapper.createObject(HectorObjectMapper.java:297) ~[hector-object-mapper-3.0-02.jar:na]

我已经尝试显式创建一个 java.util.list 对象,但它仍然会导致同样的问题。这是我创建和保存模型的代码:

val geoModel = new GeoModel(geoRK)
val thingList: java.util.List[java.lang.String] = things match {
  case Some(t) => t.map(s => s.toString())
  case None => new java.util.ArrayList()
}
geoModel.setThings(thingList)
geoDAO.upsertModel(geoModel)

模型保持良好,我可以在 cassandra 中看到它:

(column=things, value=scala.collection.JavaConversions$SeqWrapper:0, timestamp=1333555422145002)

问题是在检索对象时 Hector 似乎不知道如何处理 scala.collection 类型。

有什么办法可以解决这个问题吗?

谢谢。

最佳答案

编辑:

抱歉...误导了 scala.collection.JavaConversions$SeqWrapper 的 toString 实现,它返回相同...

不过,作为解决方法,您可以自己从 List 创建一个 java.util.List。

原创:

您可以使用 collections.JavaConverters 而不是 collection.JavaConversion。

scala> import collection.JavaConverters._
import collection.JavaConverters._

scala> List(1,2,3).asJava
res1: java.util.List[Int] = [1, 2, 3]

关于java - 将集合类型从 scala 转换为 java 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10015180/

相关文章:

java - MongoDB。从数据库中提取整数。 java.lang.Integer 无法转换为 java.lang.String

scala - 如何使用scala找到元组值?

cassandra - Scylla 数据中心和 Cassandra 数据中心在同一集群中

java - 使用Java使用Pig Latin连接到Cassandra

用户定义类型的 Java 数组

java - 这种使用移位运算的除法近似是如何工作的?

java bufferedreader,声明readline

java - Wicket:将类型安全的页面构造函数映射到可读的 URL

list - 我如何在 Scala 中得到两个列表的平方和?

java - Datastax 驱动程序中 LOCAL_QUORUM 一致性级别的使用