【问题标题】:What does "this" keyword refer to in Java's ".addActionListener(this)" [duplicate]Java的“.addActionListener(this)”中的“this”关键字指的是什么[重复]
【发布时间】:2013-10-13 02:33:51
【问题描述】:

我是 Java/Android 新手。我不明白 addActionListener(this) 中的“this”。 我已经阅读了很多书籍和论坛,但我仍然对以下内容感到困惑:

有人解释: "this" 是对当前对象的引用"

将事件处理程序类的实例注册为一个或多个组件的侦听器。 someComponent.addActionListener(instanceofMyClass);

好的,我明白了,它是一个类的对象。

但是,有人解释说: “this”表示一个已实现并实例化的 ActionListener,恰好是您的类。

所以“this”可以是一个类的对象,也可以是一个“类”。 这是我不明白的。

谁能给我解释清楚。谢谢!

【问题讨论】:

  • this 从来都不是一个类。它始终是一个对象,始终是 current 对象。

标签: java android event-handling listener this


【解决方案1】:

"this" 指的是当前对象,因为 Java 使用方法来更改对象。所以,当你在 Activity 中调用“this”时,你就是在给你的方法一些改变。

您的代码“someComponent.addActionListener(instanceofMyClass);”正在做同样的事情。您正在获取对象“someComponent”并使用方法“addActionListener”。然后 ActionListener 会想知道它将从哪里获取侦听器代码,并且您声明您希望从“instanceofMyClass”中调用它,它可以与“this”交换

你可以在这里找到另一种代码解释:What is the meaning of "this" in Java?

【讨论】:

  • 那么,如果 this 总是引用当前对象,那么当前对象是什么?没有创建对象。如果我创建一个按钮,当有人按下按钮时,该按钮是当前对象吗?
  • 如果调用“this”,它会引用构造函数创建的对象,构造函数是SomeClass()。一旦你有了对 SomeClass() 对象的引用,你就可以使用它的方法/变量。当有人点击一个按钮并且你调用“this.method()”时,它会和你的类中的“method”做同样的事情。我建议只添加一些变量并使用“this”以及仅使用变量。创建一些全局和局部变量,看看会发生什么。
【解决方案2】:

This 总是引用当前对象,它不是一个类。有时人们在他们的意思是对象时错误地说类,仅此而已。

【讨论】:

  • 您好,我对此有疑问,请参阅此example 请注意 ON CREATE MyButton m = new MyButton(this);正如您所说,这指的是对象,但是在 MyButton 类构造函数中,它被类型转换为 Interface 这是怎么发生的?我的理解是当他传递 this(一个对象)时,所以在构造函数中他应该提到一个对象(MyActivity 对象)而不是一个接口。抱歉,如果您介意这是个愚蠢的问题。
  • @srujan maddula 在那个上下文中ml 是任何实现MyListener 接口的类的对象。它叫polymorphism
【解决方案3】:

这就是发生的事情。在下面的示例中, SomeClass 实现了 ActionListener 接口,该接口只有一个需要实现的方法(actionPerformed,它将 ActionEvent 对象作为参数)。但是,为了实现这个方法,你需要一个对象。“this”指的是 SomeClass 的一个对象。

    public class SomeClass implements ActionListener{

    SomeClass(){
    Button aButton  = new Button("Click Me");
    aButton.addActionListener(this);
    }

     public static void main(String[] args) {
       SomeClass object = new SomeClass();
     }

    public void actionPerformed(ActionEvent e) {
     //do Something when user clicks the button
    }
}

【讨论】:

  • this 指的是 SomeClass 的一个对象。但是,我们还没有创建对象?没有使用“新”
  • 我加了main方法来说明清楚。
  • @user1232250:在您创建 SomeClass 的实例之前,不会执行此代码。
  • 现在清楚了吗?您需要创建 SomeClass 的对象。在主要方法中或其他地方。当你这样做时,代码将被执行。
  • 我不是安卓程序员。您必须使用某种 IDE 来设置您的项目。也许您的 IDE 会自动生成 SomeClass 的实例。您可能需要深入挖掘才能找到自动生成的代码。我很确定这个答案是正确的。
【解决方案4】:

在您的情况下,“this”既是“对当前对象的引用”又是“实现 ActionListener 接口的实现”。这意味着封闭类(“this”standby)应该实现接口ActionListener。所以当 someComponent 被点击(或其他动作)时,将调用封闭类来处理事件。

你可以参考下面的代码来理解:“this”代表YourClass的一个实例,它实现了ActionListener

public YourClass implements ActionListener
{
  private someComponent;
  public YourClass ()
   {
   someComponent = new Component();
   someComponent.addActionListener(this);
   }

  public void actionPerformed()
  {
    //add code to process the event
  }
}

【讨论】:

  • 那么,当前对象是什么?
  • 当我实现一个接口时,会创建一个对象吗?
  • "this" 代表实现ActionListener的YourClass的实例,YourClass的实例是什么?某个组件?
  • @user1232250,Java 实例通常是在您使用“new”关键字之后创建的。在我的示例中,您可以通过 YourClass yc = new YourClass(); 创建那么 yc 是 YourClass 的一个实例。
猜你喜欢
  • 2014-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
  • 2019-11-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多