2015-04-07 69 views
0

我正在編寫一個小遊戲來處理和使用自定義類來定義出現在屏幕上的各種對象。使用未知變量類型創建函數功能

我在這裏的確不是問題,它只是一直在困擾着我。

把這個代碼:

void blitBalckHoles() { //idealy, it would be nice to have both of these as one function, however I don't know how to make it so that it could accept any variable type as a parameter 
    for (BlackHole blackHole : blackHoles) {blackHole.blit();} 
} 
void blitStars() { 
    for (Star star : stars) {star.blit();} 
} 

基本上我的問題是在代碼的第一行評論。 是否有反正我可以使一個函數blits參數重要的是什麼類型它是?

回答

2

你在找什麼叫做界面。通過使用實現關鍵字和實施的blit

interface Blittable{ 
    public void blit(); 
} 

然後,您可以創建類實現該接口():

你會定義一個Blittable接口包含的blit()函數功能:

class Star implements Blittable{ 
    public void blit(){ 
    println("Star blitting."); 
    } 
} 

class BlackHole implements Blittable{ 
    public void blit(){ 
    println("Black Hole blitting."); 
    } 
} 

然後,你可以和星黑洞的情況下,通過各地的Blittable重ferences。由於實現了Blittable接口必須定義的blit()函數的任何類,你可以調用任何Blittable參考的blit()函數:

for(Blittable b : blitters){ 
    b.blit(); 
} 

全部放在一起,它看起來是這樣的:

void setup(){ 

    Star star = new Star(); 
    BlackHole blackHole = new BlackHole(); 

    ArrayList<Blittable> blitters = new ArrayList<Blittable>(); 
    blitters.add(star); 
    blitters.add(blackHole); 

    for(Blittable b : blitters){ 
    b.blit(); 
    } 
} 

interface Blittable{ 
    public void blit(); 
} 

class Star implements Blittable{ 
    public void blit(){ 
    println("Star blitting."); 
    } 
} 

class BlackHole implements Blittable{ 
    public void blit(){ 
    println("Black Hole blitting."); 
    } 
} 

請注意,您可能也只是想使用JavaScript模式,因爲鍵入的方式不那麼嚴格。

+0

@The_IT概念是一樣的。一個接口只是告訴編譯器你知道一個類有一個特定的方法。將該接口添加到您想要作爲「具有此方法的類」傳遞的任何類。如果仍然無法正常工作,請在單獨的問題中發佈[MCVE](http://stackoverflow.com/help/mcve),我們將從此處繼續。 –

+0

對不起,我開始寫一個很長的評論,發生了一些事情,只有它出現:(給我一秒來編輯它,哦,它不會讓我現在,我只是要刪除它,並重寫它。 –

+0

沒關係,過了一段時間,我意識到我的錯誤^ _ ^謝謝!從我讀到你的回覆到我評論時,我知道應該是我能夠自己設計出來的東西(只是我來自Python編程一切都比較簡單(特別是當涉及到變量類型和聲明時)lol) –