【问题标题】:MainActivity.this, NextActivity.class: Why not just class names? [duplicate]MainActivity.this、NextActivity.class:为什么不只是类名? [复制]
【发布时间】:2013-04-04 04:05:27
【问题描述】:

我有以下代码:

Intent intent = new Intent(MainActivity.this, NextActivity.class);
startActivity(intent);

我不明白为什么我们将关键字 this 放在当前类中,将关键字 class 放在我们希望开始的类的名称中。

我知道的是:

this 指的是类的当前实例,class 是我们用来定义新类的关键字。有人可以通过使用带有类名称的 thisclass 来解释我们想说什么吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    来自the documentation

    public Intent (Context packageContext, Class cls) API 添加 1级

    为特定组件创建意图。所有其他字段(操作、 data, type, class) 为空,但可以稍后修改它们 显式调用。这提供了一种创建意图的便捷方式 旨在执行硬编码的类名,而不是 依靠系统为您找到合适的课程;看 setComponent(ComponentName) 以获取有关影响的更多信息 这个的。

    参数

    packageContext 实现此类的应用程序包的上下文。

    cls 用于意图的组件类。

    简单来说:您的构造函数需要一个Context 和一个Class。类是指为给定 Java 源文件创建的 Java 类文件,它可能是当前未使用的东西。上下文与类完全无关,就用法而言,当传递给方法时,通常指的是已经实例化的东西。

    【讨论】:

    • 所以我们使用关键字class告诉android我们传递的是class类型。如果您说“是”,我们为什么不对任何其他类型进行此操作?例如,我将一个整数值传递给一个函数,我不会告诉 andoird,“嘿,Andorid 这是一个 int,不要误解它。”为什么只在 class 的情况下?
    • 因为如果您不使用关键字 class,系统将假定您传递的是某种名为 MainActivity 的 Object(使用您的示例),而不是其 Java 类文件,并且那么编译器会抱怨没有。
    【解决方案2】:

    要做出新的意图,你只需要说

    Intent intent = new Intent(this, NextActivity.class);
    startActivity(intent);
    

    This 正在定义当前类,而您不能将其用于下一个活动,因为它不是当前类。为此,您将使用 class

    【讨论】:

    • 我在匿名事件点击监听器中使用我的代码。也许,因此使用带有关键字 this 的类的名称是一个要求。你可以指导我!
    • 好吧,当您在同名范围内有另一个变量时,您可以使用 .this。所以这可能是你的问题。
    【解决方案3】:

    this 也可以正常工作,但是当您使用对话框时,关键字 this 不会引用 MainActivity。当我们使用 MainActivity.this 时,我们使用关键字 this 来避免这些情况。如果您在 Activity Class 上下文中工作,那么仅使用 this 关键字可以正常工作。自己尝试一下以及使用关键字 class 的原因——我认为 Intent() 方法的参数应该是类类型,这就是我们将类类型参数传递给函数(构造函数)的原因。

    【讨论】:

    • 我编辑了你的答案。也许,这就是你想说的:无论如何我明白了。谢谢:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2014-05-22
    • 2018-10-02
    • 1970-01-01
    • 2011-10-28
    相关资源
    最近更新 更多