2012-05-06 3 views
1

私は、姓と名は、以下に示すメンバ変数を持つJavaクラスのユーザー持っている:あなたは上記のコードで見ることができるように、私は、現在のオブジェクトについて、姓と名を設定しようとしています入れ子オブジェクト内のオブジェクトのデータメンバーを参照する方法はありますか?

public class User { 

public String firstName; 
public String lastName; 

public void register() 
{ 
    // do something 
} 

public void registerFacebook(Facebook facebookObj) 
{ 
    mAsyncRunner.request("me", new RequestListener(){ 

     public void onComplete(String response, Object state){ 
      this.firstName = "John"; 
      this.lastName = "Doe"; 
      String userRegistrationResponse = this.register(); 
     } 

をクラスユーザー。ただし、コードはRequestListenerクラスのオブジェクトの内部にあるため、不可能です。

どのようにfirstNameとlastNameを参照するのですか?

私はエラーを取得する:

firstName cannot be resolved or is not a field 

答えて

2

あなたはそれが構築されていますここでUserのインスタンスへの暗黙的な参照を持っている匿名内部クラスを、使用しているので、それが動作します。この場合は、firstNamelastNameが参照されます。

ただし、thisを削除するか、User.thisに変更する必要があります。たとえば:

public class Test { 

    private String name; 

    Test() { 
     Runnable runnable = new Runnable() { 
      @Override public void run() { 
       name = "Fred"; // Or Test.this.name = "Fred" 
      } 
     }; 
     System.out.println(name); 
    } 

    public static void main(String[] args) { 
    } 
} 

はどのようTest.this作品の詳細についてはsection 15.8.4 of the JLSを参照してください。

0

this.の部分を削除してください(thisは匿名クラスのインスタンスを表します)。または、完全に/正しく指定してください:

User.this.firstName = ... 
関連する問題