2012-09-03 21 views
-1

在運行時,需要跟蹤類的實例數。從面向對象的角度來看,您使用以下哪種慣例來實現這一目標?在運行時,需要跟蹤某個類的實例數

選擇

  1. 類級變量(靜態成員變量)
  2. 全局變量
  3. 構造
  4. 局部變量
  5. 析構

選擇1是我的選擇

我對不對?

不做作業。

我是一名JAVA程序員,但我不得不回答C++ quesion。

+0

你想知道的情況下,在內存中的任何時間點的數量,或僅僅數到目前爲止創建的實例,而不用擔心在那個點上它們是否存在於內存中? – Vikdor

+2

它是功課嗎? –

+1

您的教授是否複製了一些C++作業並將其重新標記爲Java? – Esko

回答

0

這可以通過static成員由於只有一個副本來實現維持類,您可以在構造函數中增加同樣給保持創建實例數的軌道沒有多少目前可

5

有點正確。靜態WeakHashMap和一個將自己放入地圖的構造函數可以完成這項工作。每次調用size()時,它都會檢查哪些對象已被gc化。

更多OOP(我想)的方法是使用靜態工廠方法,是這樣的:

class Trackable { 
    private static WeakHashMap<Trackable, Object> map = new WeakHashMap<>(); 
    private static final Object dummy = new Object(); 

    public static Trackable newInstance() { 
     Trackable instance = new Trackable(); 
     map.put(instance, dummy); 
     return instance; 
    } 

    public static int getTrackedObjectSize() { 
     return map.size(); 
    } 

    private Trackable() {} 
} 
+1

+1爲優雅的解決方案。 –

+0

+1我會用'Set set = Collections.newSetFromMap(new WeakHashMap ()'來代替 –

+0

-1;我不會打賭這個工作''WeakHashMap.size()'文檔說: 「返回此映射中鍵值映射的數量,這個結果是一個快照,並且可能不會反映未處理的條目,因爲它們不再被引用,所以在下一次嘗試訪問之前將被刪除。」據我所知,WeakHashMap將只有在對鍵進行查詢時實際刪除條目,調用'size()'實際上不會觸發'WeakHashMap'來仔細檢查哪些條目已過期。 –

相關問題