2015-04-07 71 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) –