我在用Java做一个CronJob函数,看起来像这样:
public class CronJob {
public static int mSeconds;
public static String task; //?¿?¿
public CronJob(int mSeconds, String task) {
this.mSeconds = mSeconds;
this.task = task;
Timer timer = new Timer();
timer.schedule(new TimerTask() {
public void run() {
//EJECUTE TASK
//testFunction();
}
}, 0, mSeconds);
}
...
}
在我的主要功能中,我想执行以下操作:
new CronJob(3000, testFunction());
我不知道如何将函数名称传递给CronJob类以及应该使用哪种变量。
谢谢。
Java有三种方法。
1)传递一个对象,该对象上具有提供所需功能的方法。
例如
new CronJob(3000, new Runnable() {
public void run() {
System.out.println("I ran");
}
});
在Java 8之前,这几乎是唯一的选择。在Java 8之后,我们还有两种方法:
2)使用lambda,实际上它只是语法上的糖,用于仅使用一种方法来创建接口的实现。
new CronJob(3000, () -> System.out.println("I ran"));
一个人可以在这里阅读Lambdas
Lambda可以接受参数,也可以从其声明上下文访问字段和最终变量。它们不是完全闭包,因此变量必须有效地是final,这意味着它们不需要声明为final,因为Java 8编译器会为我们解决这个问题。
例如:
public void scheduleJob( String name ) {
new CronJob(3000, () -> System.out.println("Hello "+name));
}
如果正在使用其方法带有参数的接口,则它可能看起来像这样
public interface Job {
public void doJob( String arg );
}
public void scheduleJob() {
new CronJob(3000, arg -> System.out.println("Hello "+arg));
}
私有无效theTaskMethod(){System.out.println(“ I ran”); }
新的CronJob(3000,()-> this :: theTaskMethod);
如果要在其方法带有参数的接口上使用此方法,则方法引用必须指向也带有相同类型参数的方法。例如
如果正在使用其方法带有参数的接口,则它可能看起来像这样
public interface Job {
public void doJob( String arg );
}
public void scheduleJob() {
new CronJob(3000, System.out::println); // would print out what ever arg was past to doJob(arg)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句