我最近使用这段代码,并意识到在匿名类中,我无法通过.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
?
答案 0 :(得分:4)
<Class>.this
语法提供了一种特殊的方式来引用类型<Class>
的对象,而不是阴影类型。
此外,<Class>
必须是您尝试访问的类型的名称。在您的情况下,Sprite
不 sprFace
的实际类型。相反,sprFace
是Sprite
的匿名子类的实例,因此语法不适用。
答案 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();