实际上,在Java中没有与委托完全对应的东西。但是有一些构造可以模仿它们的行为。
Java 8
函数式接口
在Java 8中,最接近委托的概念是函数式接口。
例如,如果您有一个C#委托:
delegate void Runnable();
在Java中,您可以创建一个函数式接口,例如:
@FunctionalInterface
public interface Runnable {
void run();
}
函数式接口的好处在于它们可以很容易地在lambda表达式中使用。
示例
假设您有以下类:
public class SomeClass {
public static void someStaticMethod() {
}
public void someMethod() {
}
}
Lambda表达式和方法引用
在Java 8中,您可以使用Lambda表达式。
List<Runnable> queue = new ArrayList<>()
queue.add(() -> someMethod())
queue.add(() -> someStaticMethod())
如果您实际上只是调用一个方法,那么有一个名为方法引用的简写方式:
List<Runnable> queue = new ArrayList<>()
queue.add(this::someMethod)
queue.add(SomeClass::someStaticMethod)
Java 7
Java 7 中,你唯一能使用的是匿名类:
List<Runnable> queue = new ArrayList<>();
queue.add(new Runnable() {
public void run() {
someMethod();
}
});
queue.add(new Runnable() {
public void run() {
someStaticMethod();
}
});
希望这些信息不会太多,这样你仍然可以学到。;-)
但是,我希望我的回答也对其他查找此问题的人有用。