水草有根 2011-06-14 22:37
浏览 206
已采纳

一个诡异的变量作用域,求解

class A{

public virtual void eat();
}

class B extends A{

public virtual void bit();
}

class C extends B{
int dog=5;

@override
public void bit(){
    new A(){
        public void eat(){
          int fox=dog + 6;   //此处报错, 诡异的变量作用域,此处不能访问class c 的变量dog,求解
        }

    } 
}

}

  • 写回答

10条回答 默认 最新

  • fmjsjx 2011-06-15 16:55
    关注

    你的user是通过@In加载的,我这里提一个可能的原因:
    @In的内容也许是延迟加载的,也就是在instance第一次调用时加载,但是使用匿名的内部类调用时明显在instance之外了,所以会是空指针,而在final B_User myuser = this.user;这行代码执行时是在instance内部,@In就加载了,所以可以正常使用。
    另:没搞懂这里为什么要用匿名的内部类这种设计,不能通过参数传进去么?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(9条)

报告相同问题?