-4

请阅读以下教程的第 4 点(This 关键字的使用)

http://www.javatpoint.com/this-keyword

如何this成为方法的形式参数。

在构造函数的情况下,如果构造函数类似于 - Const(OBJECT obj),我们可以传递this, 只是为了调用构造函数..

this在方法中作为实际参数传递会派上用场的可能场景有哪些?

4

3 回答 3

4

您可以从构造函数调用 this 以调用其他构造函数(基于调用,例如 this() :您正在调用默认构造函数, this(param) 您正在调用参数化构造函数。现在 this 作为参数,底线是,this指的是当前对象,所以在你想将当前对象作为参数传递给任何方法的任何地方,传递这个。我希望这对你有帮助。如果你正确阅读教程,你实际上可以理解。

于 2013-06-15T11:48:21.600 回答
2

也许你this()this.

第一个用于调用构造函数。例如,您可以提供一个初始化对象的默认构造函数。然后,您提供具有特殊功能的其他构造函数。您可以提供initialize()函数之类的东西或调用特定的构造函数(在本例中为默认构造函数),而不是重写初始化。

调用不同构造函数的示例:

 public class TestClass
 {
      private int x;
      private String s;

      public TestClass()
      {
          x = 0;
          s = "defaultvalue";
      }

      public TestClass(int iv)
      {
          this();    <-- Default constructor invoked
          x = iv;
          s = "defaultvalue1";
      }

      public TestClass(int iv, String sv)
      {
          this(iv);   <-- int Constructor invoked, which in turn invokes the default constructor
          s = sv;
      }
 }

第二个只是对当前对象的引用。如果您有一个实现某些接口的主类,然后将自身传递给使用这些接口的其他类,这将非常有用。

示例伪代码来说明如何使用它:

class MyWindow
    extends JPanel
{
    private JButton mButton = new JButton("Sample");
    ....

    public void addButtonPressedListener(ActionListener oListener)
    {
        mButton.addActionListener(oListener);
    }
}

class Main
  implements ActionListener
{
    public Main()
    {
        MyWindow w = new MyWindow();
        w.addButtonPressedListener(this);
    }

    public void actionPerformed(ActionEvent oEvent)
    {
        // Whenever the user presses that particular button in my mainwindow
        // we get notified about it here and can do something about it.
        System.out.println("Button in the GUI has been pressed");
    }
}
于 2013-06-15T11:55:58.087 回答
2

this,正如其他人已经指出的那样,引用当前对象并用于传递对自身的引用。我只是想说明一个例子,希望能为你澄清这一点。您通常会执行此操作的场景之一是事件处理或通知

假设你有一个EntityManager并且你想在UpdateEvent任何时候Entity添加或删除一个。您可以在添加/删除方法中包含以下内容。

public class EntityManager implements ApplicationEventPublisher {

    Set<Entity> entities = new HashSet<Entity>();

    public void addEntity (Entity e) {
        entities.add (e);
        publishEvent (new UpdateEvent (this, UpdateType.ADD, e));
    }

    public void removeEntity (Entity e) {
      if (entities.contains (e)) {
        entities.remove (e);
        publishEvent (new UpdateEvent (this, UpdateType.REMOVE, e));
      }
    }

    protected void publishEvent (Event e) {
      // handles the nitty-gritty of processing events
    }
}

wherethis指的是对象本身的事件源。

因此,EntityManager被作为的一部分传递,Event以便通知接收者稍后可以通过Event.getSource()方法调用来访问它。

于 2013-06-15T12:03:23.503 回答