如何在嵌套对象中引用对象的数据成员?

时间:2012-05-06 16:01:42

标签: java android

我有一个java类User,其成员变量firstName和lastName如下所示:

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

正如您在上面的代码中看到的,我正在尝试为User类的当前对象设置firstName和lastName。但是,由于代码位于RequestListener类的对象内,因此无法实现。

我如何引用firstName和lastName呢?

我收到错误:

firstName cannot be resolved or is not a field

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

没问题要么删除this.部分(因为this指的是它所在的实例,这是匿名类)。或者完全/正确地指定它:

User.this.firstName = ...