Java将此作为参数传递给方法

时间:2013-06-15 11:31:31

标签: java

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

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

this如何成为方法的正式论据。

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

this作为方法中的实际参数传递的方案可以派上用场吗?

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

也许您将this()this混淆。

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

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

 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");
    }
}

答案 2 :(得分: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
    }
}

其中this指的是事件源,它是对象本身。

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