【问题标题】:How does "this" actually provide a Context from an Activity when used in for example an Intent(this, ClassName.class)当用于例如 Intent(this, ClassName.class) 时,“this”实际上如何从 Activity 提供上下文
【发布时间】:2015-06-08 18:20:05
【问题描述】:

我知道intents 的实际用法,但是我不是很懂

  1. 当您编写 this 并将其作为参数传递到来自 Activity 的方法中时,真正会发生什么。

我知道java中的保留关键字this指的是一个对象。我仔细检查了 javadocs 的真正作用

在实例方法或构造函数中,this 是对 当前对象 — 其方法或构造函数正在被调用的对象 叫。您可以从内部引用当前对象的任何成员 使用 this 的实例方法或构造函数。

android documentation 他们解释说this 关键字引用了Context 实例,它是Activity 类的超类。

使用这个是因为Activity类是Context的子类

我不知道这究竟是如何工作的。我所知道的是,我在 xml 中定义了一个 onClick 侦听器,它指定了一个方法名称,并且由于布局是从特定类膨胀的,我认为膨胀类的对象可能是在某个时间创建的而this 指的是这个Activity 对象。然后通过自动类型转换自动向下转换为超类Context

【问题讨论】:

  • 您的问题也有所有答案。很难看出你的困惑在哪里。
  • 嗯,我很高兴我当时所做的所有假设都得到了证实。猜猜我必须查看操作系统的哪个部分为我创建了活动类对象以及它是如何做到的,所以我对语言的理解比现在更好。

标签: java android android-intent


【解决方案1】:

来自Activity page

ava.lang.Object
   ↳    android.content.Context
       ↳    android.content.ContextWrapper
           ↳    android.view.ContextThemeWrapper
               ↳    android.app.Activity

我们还需要注意Context是一个abstract class,所以我们需要使用一些实现,因为在java中创建一个抽象类的实例是不可能的。在这个Context page 上,您可以看到所有“已知的间接子类”:不仅仅是 Activity 可以用作上下文

所以 Activity 扩展了上下文 => Wiki Inheritance

当您编写此代码并将其作为参数传递给 来自 Activity 的方法。

Passing subclass or superclass object to method (expecting a superclass object)

【讨论】:

    【解决方案2】:

    这是 OOP 的基本原理。

    Activity 对象 Context 对象,因为Activity 类继承自Context 类,因此可以在需要Context 实例的任何地方直接使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2017-05-11
      • 2015-11-13
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多