2 回答

TA貢獻1802條經驗 獲得超5個贊
您可以通過可修改的 Map 支持不可修改的 Map。
它們具有相同的底層數據,但在不可修改的包裝器中限制了對 setter API 的訪問。
1即使您正在讀取不可修改的地圖,也會在更新可修改的地圖時打印以下代碼片段。您可能會注意到,它不會創(chuàng)建地圖數據的兩個副本,它們只是共享相同的值。
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);
}
}

TA貢獻1786條經驗 獲得超11個贊
如果您只是通過run方法中的鍵獲取地圖值,那么您可以Map使用Function接口包裝:
class Runner {
public Object run(Function<String, Object> getter) {}
public String name() {}
}
public static void main(String args[]) {
Map<String, Object> map = new HashMap<>();
List<Runner> runners;
for(Runner runner: runners) {
Object obj = runner.run(map::get);
map.put(runner.name(), obj);
}
}
添加回答
舉報