2014-10-27 67 views
0

界面對象在Java中,如果我想知道MyClass類型的多少對象,我可以通過這種方式計數器在Java中

public class MyClass { 

    public static int count = 0; 

    public MyClass() { 
     count++; 
    } 

    //other stuff 
    //... 
} 

然後定義MyClass的,只是打電話

MyClass.count

我可以得到創建的對象的數量。

我想知道是否有一種方法可以使用界面來做同樣的事情,例如如果我有我的界面叫做ICountable,那麼我怎麼知道當時有多少個ICountable的對象在我的程序中。我正在考慮用工廠模式來做這件事,但是在任何設計方式中,我都會注意到缺點,所以我還沒有找到一個可行的解決方案,有沒有人知道這樣做的好方法?

+0

你知道你將不得不首先實現你的接口嗎?所以我假設你將使用一個「實現」你的iCountable接口的類的對象? – ha9u63ar 2014-10-27 10:14:51

+1

除非你可以對實現你的接口的人進行一些控制,否則這是不可能的,除非你願意把你的接口變成一個抽象類。但是由於Java具有單一實現繼承,所以可能會干擾其他事情。 – 2014-10-27 10:16:02

+0

是的,當然,但我怎麼能強制執行計數系統的所有類實現我的界面?我如何獲得所有ICountable對象的數量,而不必爲所有實現類別單獨計算並對其進行總結? – Carmine 2014-10-27 10:17:13

回答

0

你可以看看這個線程:

how many instances for a class exists at runtime in java

但我建議,你做實施這樣的機制。在發佈代碼中幾乎沒有用例。調試/分析有幾種工具。如果我沒有記錯,那麼Eclipse探查器會跟蹤開箱即用的實例,只需啓動它即可觀看。

0

把我在Get Member/Fields of an existing Object的回答稱爲faar,據我所知,如果不分析文件中的類路徑以分析任何.class文件或(例如靜態代碼分析),則無法保證獲取所有這些信息。

即使存在實現所需接口的類,這些類可能不會直接被您的類加載器(例如匿名類)可見/可訪問。

還有一個圖書館提到大多數時候都是這樣工作的。

0

單個interface可以有多個實現。所有的實施應該考慮作爲那種類型interface

你可以嘗試類似這個。

我的界面

public interface Val {} 

實現

public class Impl1 implements Val { 
public Impl1(){ 
    Con.count++; 
} 
} 

public class Impl2 implements Val { 
    public Impl2(){ 
     Con.count++; 
    } 
} 

您需要在這裏使用全局計數器。

如:

public final class Con { 
static int count; 
} 

現在任何時候都可以找到Val

public static void main(String[] args) { 
    new Impl1(); 
    System.out.println(Con.count); 
    new Impl2(); 
    System.out.println(Con.count); 
} 

計,你可以使用不同的變量Impl1Impl2算他們每個人單獨過。

+0

是的,但是我所說的是,任何人都可以編寫一個實現我的界面的類,而不是實現計數系統,所以我會錯誤的編號 – Carmine 2014-10-27 10:53:24