this
が現在のオブジェクトを参照していることはわかっています。しかし、実際にいつ使用する必要があるのかはわかりません。たとえば、いくつかのメソッドでx
の代わりにを使用した場合、何か違いがあるでしょうか。は、検討中のメソッドのローカル変数を参照しているのでしょうか。つまり、このメソッドでのみ表示される変数です。this.x
x
についてはどうですかthis.method()
? 使用できますか? 使用する必要がありますか。 だけを使用するとmethod()
、既定では現在のオブジェクトに適用されませんか?
ベストアンサー1
このthis
キーワードは主に 3 つの状況で使用されます。1 番目で最も一般的なのは、変数参照の曖昧さを解消するためのセッター メソッドです。2 番目は、現在のクラス インスタンスを別のオブジェクトのメソッドに引数として渡す必要がある場合です。3 番目は、コンストラクター内から代替コンストラクターを呼び出す方法です。
ケース 1: を使用してthis
変数参照の曖昧さを解消します。Java の setter メソッドでは、設定しようとしているプライベート メンバー変数と同じ名前の引数を渡すのが一般的です。次に、引数x
を に割り当てますthis.x
。これにより、パラメータ「name」の値をインスタンス変数「name」に割り当てていることが明確になります。
public class Foo
{
private String name;
public void setName(String name) {
this.name = name;
}
}
ケース 2:this
別のオブジェクトに渡される引数として使用する。
public class Foo
{
public String useBarMethod() {
Bar theBar = new Bar();
return theBar.barMethod(this);
}
public String getName() {
return "Foo";
}
}
public class Bar
{
public void barMethod(Foo obj) {
obj.getName();
}
}
ケース3:代替コンストラクタを呼び出すために使用this
。コメントでは、トリニティスの別の一般的な使用法を正しく指摘しましたthis
。 1 つのクラスに複数のコンストラクターがある場合、this(arg0, arg1, ...)
コンストラクターの最初の行で を使用することで、別のコンストラクターを任意に呼び出すことができます。
class Foo
{
public Foo() {
this("Some default value for bar");
//optional other lines
}
public Foo(String bar) {
// Do something with bar
}
}
インスタンス変数が参照されているという事実を強調するために使用されているのを見たことがありますがthis
(曖昧さを解消する必要はありません)、これはまれなケースだと思います。