我读到在 Java 中接口(interface)不能被实例化 (in the documentation, Interfaces)。 Runnable,顾名思义是一个应该由某个类实现的接口(interface)。但是在我的一个 Android 应用程序的以下代码中,我看到使用了一个空的构造函数 - Runnable()...(我不确定它是否是一个构造函数),并且已经创建了一个实例 - getStatus。
final Runnable getStatus = new Runnable()
{
public void run()
{
TextView uat = (TextView) findViewById(R.id.useAndThrow);
uat.setText(MyThread.getStatus());
return;
}
};
我所知道的:
- 这可能是匿名类的一个例子。
- 实例实际上不是接口(interface)的。
但我无法将这些点联系起来。假设上面的代码在myActivity类内部,实例化的是什么,这个匿名类又是怎样的?
再详细点就好了。
最佳答案
它被称为“匿名类”。关于它的一些注意事项:
您没有为其提供名称,因此为您创建了一个名称。要查看其真实名称,只需将其写入控制台或读取字节码即可。
如果匿名类是在外部类的范围内创建的,那么就像任何内部类一样,它具有对其字段的引用。通常,它与创建时的范围相同。
如果您只需要一个简单的实现,这是一件很常见的事情。代码越多,您就越应该考虑将其放在另一个文件中(为了顺序,而不是因为您不能)。
Runnable 并不是唯一通用的接口(interface)。在 Android 上,您使用 OnClickListener、OnTouchListener...
由于匿名类与其声明位置具有相同的作用域,这意味着它具有引用。尽量不要将匿名类保留太久(例如,在静态引用中),因为这可能会导致内存泄漏。在 Android 上它非常重要,因为这个 sample显示(谈论可绘制对象,但匿名类也可以引用上下文)。
匿名类的一些缺点是它们没有构造函数,而且它不能实现多个接口(interface)。它的用途非常狭窄,但由于易于使用(和阅读)而广受欢迎。
关于java - 安卓和Java : use of runnable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052158/