第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將可變對象編排為跨對象不可變

如何將可變對象編排為跨對象不可變

一只萌萌小番薯 2021-12-10 14:47:22
我有一個像這樣的java類class Runner {  public Object run(Map<String, Object> input);  public String name();}public class Test {  public static void main(String args[]) {      Map<String, Object> map = Maps.newHashMap();    List<Runner> runners;    forEach(Runner runner: runners) {      Object obj = runner.run(map);      map.put(runner.name(), obj);    }  }}在上面的代碼中,我調用了 Runner 類的 run 方法并將它產生的輸出添加到 Map<> 對象。對跑步者對象列表重復此操作。如何使 map 對象作為輸入傳遞給 run 方法不可變?我想從地圖創(chuàng)建一個不可變的地圖并將其作為輸入參數傳遞。但我擔心我可能創(chuàng)建的不可變映射的數量取決于執(zhí)行的運行器對象的數量,這可能會導致 OOM 錯誤。是否有任何可用的模式或解決方案來解決它?任何建議將不勝感激。
查看完整描述

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);

    }

}


查看完整回答
反對 回復 2021-12-10
?
Qyouu

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);

  }

}


查看完整回答
反對 回復 2021-12-10
  • 2 回答
  • 0 關注
  • 158 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號