สำหรับเวอร์ชันเก่ากว่า Java 8
สำหรับวิธีการโทรกลับใน C # ซึ่งฉันใช้แบบนี้:
public void MyMethod(string par1, string par2, Action<int> callback, Action<int, string> callback2)
{
callback.invoke(1);
callback2.invoke(4, "str");
}
และเรียกมันว่า:
utils.MyMethod("par1", "par2", (i) =>
{
}, (i, str) =>
{
});
ฉันได้สร้างคลาสนามธรรมขนาดเล็กใน Java
package com.example.app.callbacks;
public abstract class Callback1<T> {
public void invoke(T obj) {}
}
package com.example.app.callbacks;
public abstract class Callback2<T, T2> {
public void invoke(T obj, T2 obj2) {}
}
package com.example.app.callbacks;
public abstract class Callback3<T, T2, T3> {
public void invoke(T obj, T2 obj2, T3 obj3) {}
}
...ETC
วิธี Java ดูเหมือนว่า:
public void myMethod(String par1, String par2, final Callback1<int> callback, final Callback2<int, String> callback2) {
callback.invoke(1);
callback2.invoke(4, "str");
}
ตอนนี้เมื่อเรียกมันใน Java:
utils.myMethod("par1", "par2", new Callback<int>() {
@Override
public void invoke(int obj) {
super.invoke(obj);
}
}, new Callback2<int, String>() {
@Override
public void invoke(int obj, String obj2) {
super.invoke(obj, obj2);
}
});
นอกจากนี้ยังใช้งานได้โดยการส่ง / ตั้งค่าการเรียกกลับของคุณไปยังคลาสที่คุณต้องการเรียกใช้วิธีเดียวกันนี้สามารถใช้ในการสร้างอินเทอร์เฟซได้เช่นกัน:
package com.example.app.interfaces;
public interface MyInterface<T> {
void makeDo(T obj);
void makeAnotherDo();
}