4

私はJavaで「これ」に関する何百もの説明を読みましたが、それを理解するのに本当に苦労しています。私はアンドロイドとジャバを並べて学んでいます、私はそれがそのように難しいことを知っています、しかし私はそれを楽しんでいます。私が殺されているのは「これ」です...私は「これ」を一度利用する以下のチュートリアルからのコードを貼り付けています。コードの一部を入れるつもりでしたが、できるだけ役立つようにしたいと思います。

メモに追加できる「これ」の良い説明を探しています。ありとあらゆる助けをいただければ幸いです。前もって感謝します。

サンプルコードは以下から始まります。

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;
    }
}
4

6 に答える 6

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

ここで、xPointx引数と区別するには、コンパイラに違いを伝える必要があります。を使用してそれを達成しthisます。つまり、私が書くとき、this.xそれは特定xのものが現在に属していることを意味Objectします。この場合はPointです。

あなたが提供したコードから例をとると:

AlertDialog.Builder(this)

AlertDialog.Builder()Contextは、コンストラクターのパラメーターとしてを取り込みます。ただし、ここでは、現在のContext someContext = new Context();を渡す必要があるだけなので、これをパラメータとして渡さないでください。したがって、単にを使用します。ActivityContextthis

于 2012-06-21T03:25:15.413 に答える
2

this「それ自体」と考えてください。メソッドに渡す場合thisは、オブジェクトのインスタンスをメソッドに渡すだけです。

すなわち:Studentはオブジェクトであり、ですClassroomStudentにを追加したい場合は、教室に自分自身を追加するようにClassroom指示することがあります(教室は生徒を見つけることができませんね)。だから、私は言いますStudentstudent.addToClassroom(new Classroom(), this);

于 2012-06-21T03:29:42.387 に答える
2

キーワードthisは、他の人が言ったように、現在のオブジェクトへの単なる参照です。これは通常暗黙的であり、クラスがある場合は次のようになります。

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

    void someMethod()
    {
    ...
    }
}

を使用this.x = xすると、クラスが所有するメンバー変数とコンストラクターに渡される変数を区別するのに役立ちます。また、が暗示されているため、 andを呼び出すthis.someMethod()someMethod()まったく同じことを行います。this

Android では、これが のように渡されたメソッドが表示されることがありますsomeMethod(this)。ここで何が起こるかというと、それはthis現在のアクティビティの を参照していることですContext。これは、アクティビティに関するすべてを説明する情報の集まりです。

于 2012-06-21T03:48:55.230 に答える
1

わかりました、どうなるか見てみましょう :P

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

このメソッドでは、 addSomeNewGearsgears という名前の 2 つのリストに実際にアクセスできます。

  • Machine オブジェクトの現在のギア、
  • 追加したい新しいもの。

それらは両方とも呼び出されるため、どちらgearsにアクセスしたいかはあいまいになる可能性がありますが、メソッドでローカルに宣言されているため、新しい List が優先されます。

Machine のギアにアクセスするには、キーワードを使用する必要があります。これは、のギアではなく、のギアをthis探していることをコンパイラに伝えます。classmethod

お役に立てれば!

于 2012-06-21T03:49:50.743 に答える
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ます。

于 2012-06-21T03:28:44.600 に答える
0

これは、現在のオブジェクトの参照に他なりません。これは、メンバーが現在のクラスに属していることを識別するのに非常に役立ちます。たとえば、 Class Sample{ int a; Sample(int a){ this.a=a; 「this」は現在のクラス変数と他の変数を区別します

于 2012-06-21T03:40:28.140 に答える