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