首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aerospike记录构造器不工作

aerospike记录构造器不工作
EN

Stack Overflow用户
提问于 2015-07-13 14:53:21
回答 2查看 158关注 0票数 1

我正在为我的测试用例编写aeropsike junit测试用例。为了存储空管垃圾箱,我使用ConcurrentHashMap。

代码语言:javascript
复制
// InMemory Map for storing AeroSpike Related Data...
ConcurrentMap<String, Bin[]> aerospike_keyBins = new ConcurrentHashMap<String, Bin[]>();

// InMemory Map for storing AeroSpike Related Data...
ConcurrentMap<String, Integer> aerospike_keyGen = new ConcurrentHashMap<String, Integer>();

存储箱和GenNumber相关的信息工作得很好。

但我在从地图中获取记录时遇到了一些问题(实际上是将Map中的bin值转换为Aerospike Record)。

下面是期望转换相同内容的函数。

代码语言:javascript
复制
private Record binsToRecord(String stringKey, Bin... bins) {
    Map<String, Object> mapOfBins = new HashMap<String, Object>();
    for (Bin bin : bins) {
        mapOfBins.put(bin.name, bin.value);
    }
    return new Record(mapOfBins, aerospike_keyGen.get(stringKey), 1);
}

在该函数中调用new Record时,我收到以下错误消息。

代码语言:javascript
复制
java.lang.ClassCastException: com.aerospike.client.Value$StringValue cannot be cast to java.lang.String
    at com.aerospike.client.Record.getString(Record.java:66)

在调试这个问题时,我发现在Aerospike的Record.class中,下面的函数给出了错误。

代码语言:javascript
复制
/**
 * Get bin value as String.
 */
public String getString(String name) {
    return (String) getValue(name);
}

getValue返回正确的值,但(String) getValue(name)引发错误。

有没有关于我为什么会得到这个错误的线索?

EN

回答 2

Stack Overflow用户

发布于 2015-07-17 02:00:05

您的binsToRecord方法看起来不错。

代码语言:javascript
复制
/**
 * Get bin value as String.
 */
public String getString(String name) {
    return (String) getValue(name);
}

在binValue中,binValue是一个StringValue对象,所以不能直接将其转换为String。试一试

代码语言:javascript
复制
(getValue(name)).toString()
// StringValue object provide toString() method.
票数 1
EN

Stack Overflow用户

发布于 2015-07-21 19:06:27

实际上,问题出在将值放入本地hashmap时。我在本地哈希图中推入了StringValues类型的值,修复了放入标准字符串的问题。

这是新的binsToRecordfunction。

代码语言:javascript
复制
/*
 * Convert Bin Set to Record Object.
 */
private Record binsToRecord(String stringKey, Bin... bins) {
    Map<String, Object> mapOfBins = new HashMap<String, Object>();
    for (Bin bin : bins) {
        if (bin.value instanceof Value.StringValue)
            mapOfBins.put(bin.name, bin.value.toString());
        else if (bin.value instanceof Value.LongValue)
            mapOfBins.put(bin.name, bin.value.toLong());
        else if (bin.value instanceof Value.DoubleValue)
            mapOfBins.put(bin.name, bin.value.toLong());

    }
    return (new Record(mapOfBins, aerospike_keyGen.get(stringKey), 1));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31377066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档