【发布时间】:2016-05-23 19:09:04
【问题描述】:
所以在 Java 中,可以在不创建显式类的情况下实例化接口
public interface Foo {
public void OnNotify()
}
假设我在其他地方执行以下操作,例如在订阅方法中
public void Subscribe()
{
final int someInt = 5;
Foo bar = new Foo() {
final int value = someInt;
@Override
public void OnNotify()
{
Log.d("Debug", "You are being notified that I hold the value " + value);
}
}
someObject.AddSubscription(bar);
}
这在 Android 中广泛用于设置事件的侦听器。
为什么会这样,这种实例化有一个特殊的名称吗?这可能在某种程度上与 lambda 函数有关吗?
如果我想把它交给这个实例化的接口来保存,为什么我需要创建一个“最终”变量。例如,我想传递 for 循环的当前迭代“i”来识别订阅引用的数组索引。我需要声明一个final变量来保存'i',然后将它传递给实例化的接口。
编辑: 我还在问为什么我可以在不先创建类的情况下实例化一个接口,以及它叫什么。不知道这是什么,我不可能找到重复的问题,它没有涵盖 Java 匿名类是什么。
【问题讨论】:
-
你不是在实例化一个接口,你是在实例化一个匿名类。
-
正如其他人已经指出的那样。这是一个匿名类,它只是创建使用您的接口的类的一种简单方法
-
@azurefrog 如果您可以以答案的形式发布,我可以将其标记为该问题的答案。