繁体   English   中英

Android和Java:使用runnable

[英]Android and Java: use of runnable

我已经读过在Java接口中无法实例化( 在文档中, 接口 )。 根据定义,Runnable是一个应该由某个类实现的接口。 但是在我的一个Android应用程序的下面一段代码中,我看到一个空构造函数 - Runnable()...(我不确定它是否是构造函数)已被使用,并且已经创建了一个实例 - getStatus。

final Runnable getStatus = new Runnable()
{
    public void run()
    {
        TextView uat = (TextView) findViewById(R.id.useAndThrow);
        uat.setText(MyThread.getStatus());
        return;
    }
};

我所知道的:

  1. 这可能是匿名类的一个例子。
  2. 该实例实际上不是接口。

但我无法连接点。 假设上面的代码在myActivity类中,实例化了什么,这个匿名类是什么?

一点细节都会很棒。

它被称为“匿名类”。 一些关于它的说明:

  1. 您没有为其提供名称,因此为您创建了一个名称。 要查看其真实名称,只需将其写入控制台或读取字节码即可。

  2. 如果在外部类的范围内创建,则匿名类具有对其字段的引用,就像任何内部类一样。 通常,它与创建它的范围相同。

  3. 如果你需要的只是一个简单的实现,这是很常见的事情。 代码越多,您就应该考虑将它放在另一个文件中(对于订单,不是因为您不能)。

  4. Runnable不是唯一常见的接口。 在Android上,您使用OnClickListener,OnTouchListener,...

  5. 由于匿名类与声明它的位置具有相同的范围,因此它表示它具有引用。 尽量永远不要将匿名类保留太久(例如,在静态引用中),因为这可能导致内存泄漏。 在Android上,它非常重要,正如此示例所示(讨论drawables,但匿名类也可以引用上下文)。

  6. 匿名类的一些缺点是它们没有构造函数,并且它不能实现多个接口。 它的使用范围非常狭窄,但它非常受欢迎,因为它非常易于使用(和阅读)。

谷歌有关使用“匿名内部类”的更多信息。 这篇“Java中的内部课程,神秘内容”博客文章很好地解释了不同类型的内部类。 另请参阅“3.12。匿名类”

实例化的是Runnable的匿名子类。 它被称为匿名,因为类型本身没有名称。 在此子类中,您正在实现Runnable接口中指定的run()方法。

getStatus的类型是Runnable ,但是getStatus引用的对象实际上是Runnable一个实现,它没有明确的命名类型。

代码正在创建实现Runnable接口的类的实例。 该类没有名称。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM