Вопрос по java, android, this – Пожалуйста, объясни мне «это»

4

Я прочитал сотни объяснений по поводу этого. в Java, и у меня действительно есть проблемы с пониманием этого. Я параллельно изучаю android и java, я знаю, что так сложнее, но мне это нравится. Единственное, от чего меня убивают, это "this" ... Я вставляю код из учебника ниже, в котором используется "this" ". один раз. Я собирался просто положить кусок кода, но хочу быть максимально полезным.

Я ищу хорошее объяснение "этого" что я могу добавить к своим заметкам. Любая помощь приветствуется. Заранее спасибо.

Пример кода начинается ниже:

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
import android.view.View;
import android.content.DialogInterface;
import android.app.Dialog;
import android.app.AlertDialog;

public class DialogActivity extends Activity {
    CharSequence[] items = { "Google", "Apple", "Microsoft" };
    boolean[] itemsChecked = new boolean [items.length];

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    public void onClick(View v) {
        showDialog(0);
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case 0:
            return new AlertDialog.Builder(this)
            .setIcon(R.drawable.ic_launcher)
            .setTitle("This is a dialog with some simple text...")

            .setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton)
                    {
                        Toast.makeText(getBaseContext(),
                                "OK Clicked!", Toast.LENGTH_SHORT).show();
                    }
                }
            )
            .setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton)
                    {
                        Toast.makeText(getBaseContext(),
                                "Cancel clicked!", Toast.LENGTH_SHORT).show();
                    }
                }
            )
            .setMultiChoiceItems(items, itemsChecked,
                    new DialogInterface.OnMultiChoiceClickListener() {
                        public void onClick(DialogInterface dialog,
                                int which, boolean isChecked) {
                                    Toast.makeText(getBaseContext(),
                                        items[which] + (isChecked ? " checked!":" unchecked!"),
                                        Toast.LENGTH_SHORT).show();
                    }
                }
            ).create();
        }
        return null;
    }
}
Это было рассмотрено на Stackoverflow раньше. ИщиJava + This теги, чтобы увидеть много примеров. FoamyGuy
Если вам помог ответ Казекаге Гаары, не могли бы вы пометить его как ответ, пожалуйста? Robotnik

Ваш Ответ

6   ответов
0

very useful to identify that the members belongs to the current class. For example, Class Sample{ int a; Sample(int a){ this.a=a; } } "this" will differentiate current class variable and other variable

2

this как "само". Если вы пройдетеthis методу, вы просто передаете экземпляр объекта методу.

то есть:Student это объект, как естьClassroom, Если я хочу добавитьStudent кClassroomЯ мог бы сказатьStudent добавитьitself в класс (классы не могут найти учеников, не так ли?). Итак скажуstudent.addToClassroom(new Classroom(), this);

1

Думайте об объекте (классе) Java как об отдельной сущности, которая имеет определенные вещи, которые определяют, что это такое (properties) и некоторые вещи, которые он может сделать (methods)

Например, возьмите (очень абстрактный) класс с именемMachine

class Machine {
    Piston piston1;
    ArrayList<Gear> gears;

    public void addSomeNewGears(ArrayList<Gear> gears)
    {
        for(int i = 0; i < gears.size(); i++)
        {
            this.gears.Add(gears[i]);
        }    
    }
}

В методеaddSomeNewGears у нас фактически есть доступ к ДВУМ спискам именованных передач:

The Machine object's current gears, The new ones we want to add.

Потому что они оба называютсяgears может быть неоднозначно, к какому из них мы хотим получить доступ, однако новый List будет иметь приоритет, поскольку он объявлен локально в методе.

Для доступа к механизмам машины нам необходимо использоватьthis ключевое слово, которое сообщает компилятору, что мы ищемclassшестерни, а неmethod& APOS; s

Надеюсь это поможет!

17

this относится к текущемуObjectссылка.

Прочитайте это для большего понимания.

Чтобы привести пример по ссылке:

public class Point {
    public int x = 0;
    public int y = 0;

    //constructor
    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}

Здесь, чтобы отличить отx изPoint а такжеx аргумента, вы должны указать компилятору разницу. Вы достигаете этого, используяthis, Смысл, когда я пишу,this.x это означает, чтоx принадлежит текущемуObject, который в случаеPoint.

Взяв пример из кода, который вы предоставили:

AlertDialog.Builder(this)

AlertDialog.Builder () принимает вContext в качестве параметра в его конструкторе. Но здесь вы не делаетеContext someContext = new Context(); и передать его в качестве параметра, потому что вам просто нужно передать свой текущийActivity& APOS; sContext, Так что вы просто используетеthis.

очень хорошо объяснил.
2

thisКак уже говорили другие, это просто ссылка на текущий объект. Обычно это неявно, например, если у вас есть класс как:

class ThisExample{
    int x;
    public ThisExample(int x){
        this.x = x;
        someMethod();
        this.someMethod();
    }

    void someMethod()
    {
    ...
    }
}

С помощьюthis.x = x помогает различать переменную-член, принадлежащую классу, и переменную, передаваемую в конструктор. Также звонюthis.someMethod() а такжеsomeMethod() делает то же самое, потому чтоthis подразумевается.

В Android иногда вы можете увидеть метод с передачейsomeMethod(this), Что здесь происходит, так этоthis ссылается на текущую активностьContext, который является просто кучей информации, объясняющей все о деятельности.

0

static) класса может быть выполнен только путем ссылки на некоторый экземпляр класса. Например:

class Foo {
    public void doSomething() {
        // "this" refers to the current object
        . . .
    }
    . . .
}

// then later:
Foo aFoo = new Foo();
aFoo.doSomething(); // "this" will be equal to "aFoo" for this call

// The following is illegal:
doSomething();

// so is this:
Foo.doSomething();

Внутри методаdoSomething()переменнаяthis относится к конкретному случаюFoo который был использован для вызова метода (в этом примере текущий объект, на который ссылаетсяaFoo).

Похожие вопросы