Вы можете вернуть неизменяемую Карту на карту, которую можно изменить.
Они имеют те же базовые данные, но доступ к API установщика ограничен в неизменяемой оболочке.
Следующий фрагмент кода напечатает 1
при обновлении изменяемой карты, даже если вы читаете с неизменяемой карты. Как вы могли заметить, он не создает две копии данных карты, они просто имеют одинаковые значения.
Map<String, String> modifiableMap = new HashMap<>();
Map<String, String> unmodifiableMap = Collections.unmodifiableMap(modifiableMap);
modifiableMap.put("a", "1");
System.out.println(unmodifiableMap.get("a"));
Однако попытка unmodifiableMap.put("a", "1")
приведет к UnsupportedOperationException
, как и ожидалось.
Для своего кода вы можете попробовать что-то вроде этого:
public static void main(String args[]) {
Map<String, Object> modifiableMap = Maps.newHashMap();
Map<String, Object> unmodifiableMap = Collections.unmodifiableMap(modifiableMap);
List<Runner> runners;
forEach(Runner runner: runners) {
Object obj = runner.run(unmodifiableMap);
modifiableMap.put(runner.name(), obj);
}
}