不幸的是,我无法发布完整的代码,但我无法使用较小的样本重现它。 我希望这个解释就足够了。
如果我尝试在断点处从“var”中检索值,我总是收到此消息:
Evaluation failed. Reason(s):
Unable to retrieve the correct enclosing instance of 'this'
变量视图的前2个级别如下所示:
this MENU$1 (id=291)
this$0 MENU (id=292)
this$0 MENU (id=292)
无论出于何种原因,这两个$ 0条目具有相同的ID。
我可以在变量视图中观察var的值,但是我无法在显示或表达式视图中或直接在代码中执行“var”,“this.var”或任何涉及var的内容。
public class MENU{
private String var;
...
private void menup() {
this.main("menup",
new MainProcess() {
public void run() {
System.out.println(var); // breakpoint here
...
}
}
);
}
...
}
MainProcess.run()的调用流程有点奇怪,我可以提供的是这个堆栈跟踪:
MENU$1.run() line: 173
MENU(Application).mainRun(Application$Main) line: 2688
MENU(Application).main() line: 2529
MENU(MainApplication).runApplication() line: 54
ApplicationHandler.dxfr(MainApplication, Record) line: 256
ApplicationSession$ApplicationRunner.run() line: 138
Thread.run() line: 662 [local variables unavailable]
编辑:
显示视图中的执行结果:
this This actually seems to successfully return this.toString() this.var cannot be resolved or is not a field var Unable to retrieve the correct enclosing instance of 'this' MENU.this.var Unable to retrieve the correct enclosing instance of 'this'
代码在JBoss 4应用程序服务器中运行。
答案 0 :(得分:1)
通过这个声明:
...
this.main("menup",
new MainProcess() {
public void run() {
System.out.println(var); // breakpoint here
...
您创建一个扩展/实现MainProcess的匿名类(取决于它是类还是接口)。通常,匿名类应该能够使用MENU.this.var
访问父类的字段,如其他人所建议的那样。由于这似乎不起作用,您可以尝试:
MENU$1.this.var
如果这样做,这意味着您在匿名类中有另一个var
字段(很可能是从MainProcess
继承而来的)。
总的来说,我强烈建议您使用明确定义的内部类而不是匿名类 - 这使事情更加清晰,有助于避免混淆:
public class MENU{
private String var;
...
private void menup() {
this.main("menup", new MyMainProcess() );
}
...
private class MyMainProcess extends MainProcess {
public void run() {
System.out.println(var); // breakpoint here
...
}
}
}