就在今天,我需要一种在不同对象之间传递函数的方法。我很快了解到您不能直接在Java中做到这一点,但是您可以传递一个wht实例,该实例显然被称为“匿名内部类”,如下所示:
定义类:
interface MyCallback { public int execute(int i1, int i2); }
使其成为一个实例:
MyCallback callback = new MyCallback() { public int execute(int i1, int i2) { return i1 + i2; } };
并称之为:
int sum = callback.execute(1, 2); // Sets sum to 3.
很简单。但是我不明白的是为什么它被称为“匿名”。我不只是给它起名字MyCallback吗?命名的东西不能匿名,对吗?请避免对这个术语感到困惑。
不,您说的是MyCallback()接口的实例。会使用您提供的方法逻辑为实现该接口的类提供动态名称,而该名称并不是您可以真正确定或使用的名称…因此,就您的源代码而言,它确实是匿名的。
(通常,该名称是通过在封闭类的名称末尾附加一个数字后缀来构造的,但是您无法知道将使用哪个后缀,并且不知道该名称对于该词的大多数用法是足够匿名的)