this
キーワードを入力パラメーターとして
渡したコードを見てきました。例えば:
getContainer(this);
キーワードのthis
意味は?クラス自体のインスタンス (またはその線に沿ったもの) を参照していると聞きましたが、それはどのように機能しますか?
this
キーワードを入力パラメーターとして
渡したコードを見てきました。例えば:
getContainer(this);
キーワードのthis
意味は?クラス自体のインスタンス (またはその線に沿ったもの) を参照していると聞きましたが、それはどのように機能しますか?
キーワード this は、インスタンス メソッドの本体、インスタンス初期化子またはコンストラクター、またはクラスのインスタンス変数の初期化子でのみ使用できます。それ以外の場所にある場合は、コンパイル時エラーが発生します。一次式として使用される場合、キーワード this は、インスタンス メソッドが呼び出されたオブジェクト (§15.12) または構築中のオブジェクトへの参照である値を示します。this の型は、キーワード this が発生するクラス C です。実行時に参照される実際のオブジェクトのクラスは、クラス C または C のサブクラスである可能性があります。
[...]
キーワード this は、特別な明示的なコンストラクター呼び出しステートメントでも使用され、コンストラクター本体の先頭に表示できます (§8.8.7)。
そうです、クラスは this キーワードを使用してそれ自体を参照できます。このthis
キーワードは、メソッド内のローカル変数がクラス メンバー変数と同じ名前を持つ場合にも必要であり、両者を区別します。
this
メソッドが呼び出された現在のインスタンスを参照し、
したがって、そのメンバーメソッドを呼び出す現在のインスタンスへの参照を渡します
class MyRunnable implements Runnable {
Thread t;
public MyRunnable() {
this.t = new Thread(this); //here it passes reference to current instance of `Runnable`
}
public void run() {
}
}
this
呼び出し元クラスのインスタンスを呼び出し先クラスに渡すために渡すこともできます。例えば
public class Caller{
public void callerClassMethod1(){
new Called(this).
}
public void callerClassMethod2(){
}
}
class Called{
private Caller caller;
public Called(Caller caller){
this.caller=caller;
}
public void calledClassMethod1(){
//.... Do something before
caller.callerClassMethod2();
//..... Do something after
}
}
このようにして、2 つのクラスの責任を分離し、同時にそれらを結合したままにすることができます。
Java にはクラスがあり、それらのクラスのインスタンス (オブジェクト) を作成します。したがって、オブジェクトがそれ自体を指すか参照する必要がある場合は、thisキーワードが使用されます。