Aerospike JUNIT记录构造函数不起作用
问题描述:
我正在为我的测试用例编写aeropsike junit测试用例。为了存储aerospike箱,我正在使用ConcurrentHashMap。Aerospike JUNIT记录构造函数不起作用
// 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相关信息工作得很好。
但我面临的问题,同时从地图获取记录(实际上将bin的值从Map
转换为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)
在调试这个问题,我发现,在塞式的Record.class
, 以下功能给错误。
/**
* Get bin value as String.
*/
public String getString(String name) {
return (String) getValue(name);
}
getValue
将返回正确的值,但(String) getValue(name)
抛出错误。
任何线索,为什么我得到这个错误?
答
您的binsToRecord方法看起来不错。
/**
* Get bin value as String.
*/
public String getString(String name) {
return (String) getValue(name);
}
这里在Bin binValue是一个StringValue对象,所以你不能直接将它转换为String。 尝试
(getValue(name)).toString()
// StringValue object provide toString() method.
答
其实,问题是,而把价值当地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));
}
谢谢sudhanshu。我得到了代码中的实际问题。 –