1

我有一个 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
4

2 回答 2

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) {
    }
}

有关如何工作的更多详细信息,请参阅JLS 的第 15.8.4 节Test.this

于 2012-05-06T16:03:08.847 回答
0

删除this.部分也没问题(this指的是它所在的实例,即匿名类)。或完全/正确指定它:

User.this.firstName = ...
于 2012-05-06T16:04:35.500 回答