2013-10-13 9 views
1

Я новичок в Java/Android. Я не понимаю «это» в addActionListener (это). Я прочитал много книг и форума, но я до сих пор путаю следующее:Что означает «это» ключевое слово в Java .addActionListener (this) »

Кто-то объяснить: «это» является Другим крупным на текущий объект»

Зарегистрировать экземпляр класса обработчика событий как listenser . на одного или нескольких компонентов someComponent.addActionListener (instanceofMyClass);

Хорошо, я понимаю, что это объект класса

Однако кто-то объяснить: «это» представляет собой реализованы и модули. который является вашим классом.

Таким образом, «это» может быть объектом класса, а также «класса». Это то, чего я не понимаю.

Может кто-нибудь объяснить мне ясно. Благодаря!

+1

'this' не является классом, когда-либо. Это объект всегда, * текущий * объект всегда. –

ответ

1

Вот что происходит. В приведенном ниже примере 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 
    } 
} 
+0

это относится к объекту SomeClass. Однако мы не создали объект? Нет 'new' используется – user1232250

+1

Я добавил основной метод, чтобы сделать его понятным. – lochi

+1

@ user1232250: Этот код не будет выполнен, пока вы не создадите экземпляр SomeClass. – kcoppock

2

This всегда относится к текущему объекту, а не к классу. Иногда люди ошибочно говорят о классе, когда они подразумевают объект, вот и все.

+0

Привет, у меня есть сомнения относительно этого, пожалуйста, обратитесь к этому [пример] (http://stackoverflow.com/a/18585247/3228960) обратите внимание на строку в ON CREATE MyButton m = new MyButton (this); как вы сказали, это относится к объекту, но в конструкторе класса MyButton ему приписывается интерфейс, как это происходит? Мое понимание заключается в том, что он передавал это (объект), поэтому в конструкторе он должен упоминать объект (объект MyActivity), а не интерфейс. Извините, если вы возражаете против этого, как глупый вопрос. –

+1

@srujan maddula в этом контексте 'ml' - это объект любого класса, который реализует интерфейс MyListener. Его называют [полиморфизм] (http://stackoverflow.com/a/3110318/2180290). –

2

«this» ссылается на текущий объект, так как Java использует методы для изменения объектов. Поэтому, когда вы вызываете «это» в своей деятельности, вы даете вашему методу что-то изменить.

Ваш код "someComponent.addActionListener (instanceofMyClass);" делает то же самое. Вы берете объект «someComponent» и используете метод «addActionListener». Затем ActionListener задается вопросом, где он получит код слушателя, и вы заявляете, что хотите, чтобы его вызывали из «instanceofMyClass», который можно было заменить на «this»

Вы могли найти другое объяснение с кодом здесь: What is the meaning of "this" in Java?

+0

Итак, если это всегда относится к текущему объекту, каков текущий объект? Объекта не создано. Если я создаю кнопку, кнопка является текущим объектом, когда кто-то нажимает кнопку? – user1232250

+0

Если вы назовете «это», он будет ссылаться на объект, созданный конструктором, который конструктором является SomeClass(). Когда у вас есть ссылка на объект SomeClass(), вы можете использовать его методы/переменные. Когда кто-то нажимает кнопку, и вы вызываете «this.method()», она будет делать то же самое, что и «метод» в вашем классе. Я бы рекомендовал просто добавить некоторые переменные и возиться с «этим» и только с переменными. Сделайте некоторые глобальные и локальные переменные и посмотрите, что произойдет. –

1

В вашем случае «это» является как «ссылкой на текущий объект», так и «реализацией, реализующей интерфейс ActionListener». Это означает, что класс включения («это» означает) должен реализовать интерфейс ActionListener. поэтому при щелчке на каком-то компоненте (или других действиях) для обработки события будет задействован закрытый класс.

Вы можете обратиться к ниже код, чтобы получить идею: «это» означает экземпляр 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 
    } 
} 
+0

Итак, каков текущий объект? – user1232250

+0

Когда я реализую интерфейс, объект будет создан? – user1232250

+0

"this" означает экземпляр YourClass, который реализует ActionListener, что такое экземпляр YourClass? SomeComponent? – user1232250

Смежные вопросы