为什么我不能在匿名类中使用<class> .this?</class>

时间:2011-08-18 06:05:46

标签: java oop anonymous anonymous-class

我最近使用这段代码,并意识到在匿名类中,我无法通过.this访问该实例,如下所示:

Sprite sprFace = new Sprite() {

    @Override
    protected void onManagedUpdate(float pSecondElapsed) {
        runOnUpdateThread(new Runnable() {

        @Override
        protected void run() {    
            Sprite.this.getParent().detach(Sprite.this); // Here
        }});
    }

};

我知道如何解决它(只是声明一个“我”变量),但我需要知道为什么我不能使用<Class>.this

2 个答案:

答案 0 :(得分:4)

<Class>.this语法提供了一种特殊的方式来引用类型<Class>的对象,而不是阴影类型。

此外,<Class>必须是您尝试访问的类型的名称。在您的情况下,Sprite sprFace的实际类型。相反,sprFaceSprite的匿名子类的实例,因此语法不适用。

答案 1 :(得分:1)

外部对象的类型不是Sprite,而是Sprite的匿名子类,您无法在代码中命名此匿名子类。

在这种情况下,您需要一个名称来引用,因此匿名类不会执行此任务。您可以使用本地类(其行为具有名称的匿名类)。在代码块中,您可以编写:

class MySprite extends Sprite {

    @Override
    protected void onManagedUpdate(float pSecondElapsed) {
        runOnUpdateThread(new Runnable() {
            MySprite.this.getParent().detach(MySprite.this); // Here
        });
    }

};

Sprite sprFace = new MySprite();