我想创建一个循环,它读取现在要运行的方法并执行它们。我想过制作类似的东西:
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 ++)
我需要它,因为执行的方法会在游戏过程中改变很多时间,我想避免使用#34;如果""和代码混乱
答案 0 :(得分:3)
将您的每个方法定义为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
答案 1 :(得分:1)
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()
方法的匿名类。将调用集合中每个run()
实现的Runnable
方法,并且在这些run()
方法中,您可以执行任何操作。在这种情况下,您只需调用另一个函数。
请参阅匿名类的this documentation。有一种更简单的符号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