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,求解
}
}
}
}
你的user是通过@In加载的,我这里提一个可能的原因:
@In的内容也许是延迟加载的,也就是在instance第一次调用时加载,但是使用匿名的内部类调用时明显在instance之外了,所以会是空指针,而在final B_User myuser = this.user;这行代码执行时是在instance内部,@In就加载了,所以可以正常使用。
另:没搞懂这里为什么要用匿名的内部类这种设计,不能通过参数传进去么?
你这个是java?
以下没有问题
[code="java"]abstract class A {
public abstract void eat();
}
abstract class B extends A {
public abstract void bit();
}
class C extends B {
int dog = 5;
@Override
public void bit() {
new A() {
@Override
public void eat() {
int fox = dog + 6; // 此处报错, 诡异的变量作用域,此处不能访问class c 的变量dog,求解
}
};
}
@Override
public void eat() {
// TODO Auto-generated method stub
}
}[/code]
virtual...
难道是C#?
但是虚方法也得有方法体呀……
无语...
说实话,我很奇怪你是怎么调用的,我测了了一下,没这种问题的呀……
[quote]这是不是nested class ?如果是这样,只能调用外层static 变量,
还有一个什么inner class,如果是这样,就只能调用外层final变量
到底是哪个?求解 [/quote]
我觉得你这个是匿名内部类,内部类可以访问外围类的所有成员,你说的“final变量”应该是指临时变量之类的,并非类成员。
嵌套类是static的,只能访问外围类的静态成员和方法
[quote]我估计可能是@In的机制造成的(我用seam),实在没有办法了,就只好在 [/quote]
这个注解没有研究过……,Good luck
[quote]问题补充:
刚才又试一下,并不是@in的问题,连普通的C的类变量
比如 private String userName;在
new A(){}里都访问不到。但是编译不报错,运行就取不到值或报null point错误,诡异,太诡异了。 [/quote]
话说,楼主最好吧完整的代码放上来看一下(是完整的代码,而不是经过转义的伪代码),不然不好研究啊……
请检查DataModel和他的父类中是否有user em status等变量
[quote]请检查DataModel和他的父类中是否有user em status等变量[/quote]
顶楼上的。
刚想让楼主把DataModel传上来看看。
这个PagedListDataModel类也没有重复定义的成员变量?
比如user em status等
还有查查重复类,执行的类和你的源码并不匹配
水平有限,暂时没想到其他方面
如果你解决了,记得告诉我一下,学习学习。