Java: 是否有可能制作一套方法或任何类似的东西?

Java: is it possible to make set of methods or anything working like it?

我想创建一个循环,读取哪些方法现在即将 运行 并全部执行。我想过做这样的事情:

set.add(milk());  set.add(doSomething());  set.add(count()); 

for(Iterator i = set.begining(); i!= set.end(); ++i){
*i; //do the method on "i"
}

(我还不知道java中集合的实现,只知道c++)

我需要它,因为执行的方法在游戏过程中会改变很多时间,我想避免 "if's" 和代码混乱

将您的每个方法定义为 Runnnable,然后将它们添加到数组中并通过为每个方法调用 run() 进行迭代。

喜欢

Runnable addMilk = new Runnable() {
  @Override
  public void run() { System.out.println("adding milk");
}
}

使用新的 Java 8 个 Lambda 运算符可以缩短符号

Runnable addMilk = () -> { System.out.println("adding milk"); };

还有Callable如果你想return一个值

Java 为接口 Runnable 提供了允许将功能作为对象传递的方法 run()。 (任何其他接口也可以允许这样做,但 Runnable 是 Java 中的标准)。你可以这样做:

final HashSet<Runnable> set = new HashSet<>();
set.add(new Runnable() {
    public void run() {
        milk(); //will execute milk()
    }
});
set.add(new Runnable() {
    public void run() {
        doSomething(); //will execute doSomething()
    }
});
// and so on

for(Runnable r : set) {
    r.run(); //will execute each Runnable in the set
}

此方法创建匿名 类 实现 Runnable 及其 run() 方法。集合中每个 Runnable 实现的 run() 方法将被调用,在这些 run() 方法中你可以做任何你想做的事情。在这种情况下,您只需调用另一个函数即可。

参见this documentation of anonymous classes. There is a simpler notation called lambda-expressions。但是如果你只是学习 Java,你一定要先学习匿名 类。


更新: 为了准确去除牛奶的 Runnable,您可以这样做:

final HashSet<Runnable> set = new HashSet<>();
//store the runnable in variable so that we know which runnable to remove afterwards
final Runnable milk = new Runnable() {
    public void run() {
        milk(); //will execute milk()
    }
};
//add the runnable as usual
set.add(milk);
//add some other runnables
set.add(new Runnable() {
    public void run() {
        doSomething(); //will execute doSomething()
    }
});
// and so on

for(Runnable r : set) {
    r.run(); //will execute each Runnable in the set
}
set.remove(milk); //remove the Runnable we created first