我有一个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
答案 0 :(得分:2)
它的工作原理是因为您使用的是匿名内部类,它具有对其构造的User
实例的隐式引用。这就是firstName
和lastName
在这种情况下所指的内容。
但是,您需要删除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 = ...