使用未知变量类型创建函数

时间:2015-04-07 05:51:54

标签: function object processing

我正在编写一个小游戏来处理和使用自定义类来定义屏幕上出现的各种对象。

我这里所拥有的并不是一个问题,它只是让我烦恼的事情。

拿这段代码:

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();}
}

基本上我的问题在第一行代码中被注释。 无论如何我可以创建一个函数来使参数更加重要吗?

1 个答案:

答案 0 :(得分:2)

您正在寻找的内容称为界面

您将定义一个包含blit()函数的 Blittable 界面:

interface Blittable{
  public void blit();
}

然后,您可以使用 implements 关键字创建接口实现,并实现blit()函数:

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

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

然后你可以传递Star和BlackHole的实例作为Blittable引用。由于任何实现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模式,因为打字的方式要严格得多。