亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

Java記憶參考

Java記憶參考

牧羊人nacy 2021-12-10 12:39:47
我正在通過方法創建對象。然后我想“摧毀”它。我需要以某種方式記住對指定對象的引用以調用destroy()它?我該怎么做?public class Obj {     private int size;     private boolean exist;     private Obj(int size) {          this.size = size;          this.exist = true;     }     public static Obj getObj(int size) {          Obj s = new Obj(size);          return s;     }     public void destroy() {          exist = false;     }}
查看完整描述

3 回答

?
青春有我

TA貢獻1784條經驗 獲得超8個贊

因此,您的方法創建一個資源,其他一些實體對其進行操作,然后您釋放該資源。我暖嗎?


在這種情況下,clean 方法是將在對象上操作的代碼作為函數對象傳遞,因此您絕對可以在它退出時進行清理。總體思路稱為“周圍執行”。


 import java.util.function.Consumer;


 public static void getObj(int size, Consumer<Obj> consumer) {

      Obj s = new Obj(size);

      try {

          consumer.accept(s);

      } finally {

          s.destroy();

      }

 }

用于:


Obj.getObj(1066, s -> {

    ... something with s ...;

});

或者,還有java.lang.AutoCloseabletry-with-resource 將責任放在調用者身上,因此最好盡可能避免。


在任何情況下,嘗試在靜態中池化可變變量通常是一個非常糟糕的主意。


查看完整回答
反對 回復 2021-12-10
?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

垃圾收集器應該為你做...但是如果你想隱式調用 destroy ,你可以定義所有實例的類級別列表


public class Obj {

     private int size;

     private boolean exist;

     private static List<Obj> list = new ArrayList<>();



     private Obj(int size) {

          this.size = size;

          this.exist = true;

     }


     public static Obj getObj(int size) {

          Obj s = new Obj(size);

          list.add(s) // save ref

          return s;


     }


     public void destroy() {

          exist = false;

     }

}


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

TA貢獻1735條經驗 獲得超5個贊

其他答案似乎試圖教育您有關垃圾收集的知識。


但是,為了回答您的實際問題......在你的代碼,你將需要調用工廠方法和結果分配給一個變量:Obj obj = Obj.getObj(1234)。這是您對對象的引用。當您想調用該destroy()方法時,請使用該引用。


例如:


public class Main {


    public static void main(String[] args) {

        Obj obj = Obj.getObj(42);

        obj.destroy();

    }

}


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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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