我正在尝试在可批处理类的 finish() 方法中使用全局 Map 变量,但它的行为很奇怪,我确定我做错了什么,但不知道在哪里。在下面的简化代码中,第一条调试消息按预期输出地图的实际大小。但是,finish() 方法中的调试消息输出 0,作为同一映射的大小。看起来地图在途中的某个地方被重新实例化,但我不确定在哪里。
global class MySchedulableClass implements Database.Batchable<sObject> {
global map<string,string> StringStringMap;
global string query;
global MySchedulableClass(){
if (query == null)
query = 'Select id, name From Contact LIMIT 20';
if (StringStringMap == null){
StringStringMap = new map<string,string>();
}
}
global Database.QueryLocator start(Database.BatchableContext BC){
return Database.getQueryLocator(query);
}
global void execute(Database.BatchableContext BC,List<sObject> scope){
for(Sobject s: scope) {
con = (Contact) s;
StringStringMap.put(s.id, s.name);
}
system.debug('Map size:' + StringStringMap.size());
}
global void finish(Database.BatchableContext BC){
system.debug('Map size:' + StringStringMap.size());
}
}