[英]How to call function with callbacks in Java like I do it in C#?
我对Java很陌生,但是我需要编写类似C#代码的东西(这是手工输入的原型,目的只是为了说明我的需求)
private void ParentFunc()
{
var worker = new WorkerClass()
worker.DoWork(e => console.Write("Progress" + e));
}
public class WorkerClass()
{
public method DoWork(Action<int> callback)
{
for (int i=1; i<1000; i++) callback.Invoke(i);
}
}
很少解释。 我在android中使用AsyncTask
并调用分类的外部处理器,但希望它们发回信号,以便我可以publishProgress
。 我宁愿不要将接口放在我的AsyncTask
由于不支持闭包,因此您必须使用接口和匿名内部类。
private void ParentFunc {
WorkerClass worker = new WorkerClass();
worker.doWork(new Callback<Integer>() {
public void invoke(Integer arg) {
System.out.println("Progress" + arg);
}
});
}
public class WorkerClass {
public doWork(Callback<Integer> callback) {
for (int i=1; i<1000; i++) callback.invoke(i);
}
}
public interface Callback<T> {
public void invoke(T arg);
}
在Java中,您使用实现接口的匿名类。 这有点冗长,但效果很好:
interface MyAction {
void doit(String str);
}
class WorkerClass {
void doWork(MyAction action);
}
void main(String args[]) {
WorkerClass worker = new WorkerClass();
worker.doWork(new MyAction {
public void doit(String e) {
System.out.println("Progress" + e)
}
});
}
在支持课程的帮助下:
interface CallBack<P>
{
public void callback(P p);
}
class MyCallBack implements CallBack<String> {
public void callBack(String p) {
System.out.println(p);
}
}
class WorkerClass {
public void doWork(CallBack<String> callback)
{
// do work
callback.callBack("Done!");
}
}
WorkerClass wc = new WorkerClass();
wc.doWork(new MyCallBack());
我不建议您使用匿名类,因为我发现它们非常冗长,直到无法使用更平滑的语法为止,但这只是个人喜好,当我使用它们时,我最终在括号之间失去了自我。
使用Java 8是可能的。请参见我对重复问题的回答:
https://stackoverflow.com/a/26776520/1206998
使用函数作为参数:
import java.util.function.Function;
public String applyFunction(Function<String,String> function){
return function.apply("what ever");
}
呼叫
// with someObject.someMethod(String) => String
xxx.applyFunction(someObject::someMethod);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.