2014-09-23 40 views
1

我對Java有一個非常簡單的問題,但解釋它並不像我期望的那麼簡單。基本上,我想檢查是否存在某個類的任何對象。一個例子:檢查Java中的某些現有對象

我有一個類動物,我有兩個亞類,貓和狗。當運行該程序時,我想知道是否存在任何狗或貓。我知道我創造了一隻狗,或者一隻貓,但我不知道它是哪一隻。我可以檢查我之前編寫的所有貓狗,如果它們存在或不存在,但它不僅是一個醜陋的,也是一個愚蠢的解決方案。

那麼,有沒有一種很好的方式來知道目前是否存在任何狗或貓?

在此先感謝!

+3

我們可以看看代碼嗎? – qbit 2014-09-23 18:11:38

+1

你的動物是否有明確停止存在的方法?你是否需要訪問狗和/或貓對象本身,或者是否足夠了解某些存在? – 2014-09-23 18:13:58

+1

你想要做的就是詢問JVM「T類型的任何對象是否存在?」 – 2014-09-23 18:15:43

回答

3

這裏是一個真正簡單的方法...

假定狗和狗永遠不死(因爲我的孩子會想),那麼每一個類可以有靜態計數器。

class Dog extends Animal { 
    private static int liveOnes = 0; 

    public Dog() { 
    liveOnes++; 
    } 

    public static int getHowManyAlive() { return liveOnes; } 
} 

然後,您可以檢查是否使用

Dog.getHowManyAlive() > 0 

如果他們死了,那麼你就需要明確地殺死他們和遞減計數存在任何狗。

+2

也是,如果它的多線程,您可能想同步它。 – 2014-09-23 18:25:37

+1

使用靜態也是非常難看的(而不是OO):知道有多少狗活着,它不是狗的財產。我寧願使用DogFactory(工廠設計模式),實例化它,然後在工廠內增加計數器。 – Kraal 2014-09-23 18:30:58

+0

是的,工廠將是一個更優雅的解決方案,但我很簡單。 – 2014-09-23 18:37:30

0

解決方案使用工廠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(); 

注意,這可以讓你有不同的計數器取決於你生產的狗的特性(例如,如果你的工廠,您可以選擇膚色,種族,性格,要生產的狗的大小)