我對Java有一個非常簡單的問題,但解釋它並不像我期望的那麼簡單。基本上,我想檢查是否存在某個類的任何對象。一個例子:檢查Java中的某些現有對象
我有一個類動物,我有兩個亞類,貓和狗。當運行該程序時,我想知道是否存在任何狗或貓。我知道我創造了一隻狗,或者一隻貓,但我不知道它是哪一隻。我可以檢查我之前編寫的所有貓狗,如果它們存在或不存在,但它不僅是一個醜陋的,也是一個愚蠢的解決方案。
那麼,有沒有一種很好的方式來知道目前是否存在任何狗或貓?
在此先感謝!
我對Java有一個非常簡單的問題,但解釋它並不像我期望的那麼簡單。基本上,我想檢查是否存在某個類的任何對象。一個例子:檢查Java中的某些現有對象
我有一個類動物,我有兩個亞類,貓和狗。當運行該程序時,我想知道是否存在任何狗或貓。我知道我創造了一隻狗,或者一隻貓,但我不知道它是哪一隻。我可以檢查我之前編寫的所有貓狗,如果它們存在或不存在,但它不僅是一個醜陋的,也是一個愚蠢的解決方案。
那麼,有沒有一種很好的方式來知道目前是否存在任何狗或貓?
在此先感謝!
這裏是一個真正簡單的方法...
假定狗和狗永遠不死(因爲我的孩子會想),那麼每一個類可以有靜態計數器。
class Dog extends Animal {
private static int liveOnes = 0;
public Dog() {
liveOnes++;
}
public static int getHowManyAlive() { return liveOnes; }
}
然後,您可以檢查是否使用
Dog.getHowManyAlive() > 0
如果他們死了,那麼你就需要明確地殺死他們和遞減計數存在任何狗。
也是,如果它的多線程,您可能想同步它。 – 2014-09-23 18:25:37
使用靜態也是非常難看的(而不是OO):知道有多少狗活着,它不是狗的財產。我寧願使用DogFactory(工廠設計模式),實例化它,然後在工廠內增加計數器。 – Kraal 2014-09-23 18:30:58
是的,工廠將是一個更優雅的解決方案,但我很簡單。 – 2014-09-23 18:37:30
解決方案使用工廠DP:
public class DogFactory {
private int producedDogsCount;
public DogFactory() {
this.producedDogsCount = 0;
}
public Dog produceDog() {
this.producedDogsCount++;
return new Dog();
}
public int getProducedDogsCount() {
return this.producedDogsCount;
}
}
然後產生的狗,你需要的工廠:
DogFactory dogFactory = new DogFactory();
,並需要調用produceDog()
方法:
Dog myDog = dogFactory.produceDog();
爲了要知道你有多少狗生產你問狗廠:
int producedDogsCount = dogFactory.getProducedDogsCount();
注意,這可以讓你有不同的計數器取決於你生產的狗的特性(例如,如果你的工廠,您可以選擇膚色,種族,性格,要生產的狗的大小)
我們可以看看代碼嗎? – qbit 2014-09-23 18:11:38
你的動物是否有明確停止存在的方法?你是否需要訪問狗和/或貓對象本身,或者是否足夠了解某些存在? – 2014-09-23 18:13:58
你想要做的就是詢問JVM「T類型的任何對象是否存在?」 – 2014-09-23 18:15:43