2012-05-06 36 views
1

我有擁有成員變量firstName和如下所示lastName的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(); 
     } 

正如你可以在上面的代碼中看到,我想設置名字和姓氏爲的當前對象class用戶。但是,由於代碼位於類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 = ...