如何像在C#中那样在Java中使用回调调用函数?
我对Java非常陌生,但我需要编写类似于此C#代码的代码(这是手动键入的原型,只是为了说明我需要什么)如何像在C#中那样在Java中使用回调调用函数?,c#,java,android,delegates,C#,Java,Android,Delegates,我对Java非常陌生,但我需要编写类似于此C#代码的代码(这是手动键入的原型,只是为了说明我需要什么) private void ParentFunc() { var worker=new worker类() worker.DoWork(e=>console.Write(“Progress”+e)); } 公共类WorkerClass() { 公共方法DoWork(操作回调) { 对于(int i=1;i,借助支持类: interface CallBack<P> { public
private void ParentFunc()
{
var worker=new worker类()
worker.DoWork(e=>console.Write(“Progress”+e));
}
公共类WorkerClass()
{
公共方法DoWork(操作回调)
{
对于(int i=1;i,借助支持类:
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());
接口回调
{
公共无效回收(P);
}
类MyCallBack实现回调{
公共无效回调(字符串p){
系统输出println(p);
}
}
阶级工人阶级{
公共无效doWork(回调)
{
//工作
回调。回调(“完成!”);
}
}
WorkerClass wc=新的WorkerClass();
wc.doWork(新的MyCallBack());
我不会建议您使用匿名类,因为我发现它们非常冗长,直到无法使用更流畅的语法为止,但这只是个人喜好的问题,当我使用它们时,我最终会在大括号之间失去自我。在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)
}
});
}
由于闭包还不受支持,所以您必须使用接口和匿名内部类
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);
}
private void ParentFunc{
WorkerClass worker=新的WorkerClass();
worker.doWork(新回调(){
公共void调用(整型参数){
系统输出打印项次(“进度”+arg);
}
});
}
公营工人班{
公共道具(回调){
对于(int i=1;i而言,java 8是可能的。请参阅我对重复问题的回答:
使用函数作为参数:
import java.util.function.Function;
public String applyFunction(Function<String,String> function){
return function.apply("what ever");
}
可能是@Eng.Fouad Oops的重复,我用C#编码太久了:)谢谢!
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);