1

以下に示すメンバ変数 firstName と lastName を持つ Java クラス User があります。

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 に答える