我正在为我的测试用例编写aeropsike junit测试用例。为了存储空管垃圾箱,我使用ConcurrentHashMap。
// 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)。
下面是期望转换相同内容的函数。
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时,我收到以下错误消息。
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中,下面的函数给出了错误。
/**
* Get bin value as String.
*/
public String getString(String name) {
return (String) getValue(name);
}getValue返回正确的值,但(String) getValue(name)引发错误。
有没有关于我为什么会得到这个错误的线索?
发布于 2015-07-17 02:00:05
您的binsToRecord方法看起来不错。
/**
* Get bin value as String.
*/
public String getString(String name) {
return (String) getValue(name);
}在binValue中,binValue是一个StringValue对象,所以不能直接将其转换为String。试一试
(getValue(name)).toString()
// StringValue object provide toString() method.发布于 2015-07-21 19:06:27
实际上,问题出在将值放入本地hashmap时。我在本地哈希图中推入了StringValues类型的值,修复了放入标准字符串的问题。
这是新的binsToRecordfunction。
/*
* 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));
}https://stackoverflow.com/questions/31377066
复制相似问题