Eclipse表达式窗口无法访问public方法,私有Map单独可访问调用size却报错
问题原因
这个是Eclipse调试器表达式求值模块的已知特性/缺陷,和你代码逻辑无关:
- 单独访问
tableModel.payees.payeeMap时,调试器直接走反射逻辑读取私有字段值,默认开了私有成员访问权限的情况下可以正常获取到Map对象。 - 链式调用
payeeMap.size()时,调试器会先做静态类型校验,此时会判定私有字段payeeMap对当前上下文不可见,直接终止求值抛出错误,根本不会走到后续反射调用方法的步骤。 - 你看到的
PAYEE_LOOKUP_FILENAME未初始化的报错是连带bug:表达式求值失败后,调试器会错误遍历所在类的常量字段做冗余检查,误报已经赋值的常量未初始化,和你实际的代码没有关系。
解决办法
你可以任选以下方式绕开这个问题:
- 给
PayeeListMap新增一个public方法getPayeeMapSize(),内部直接返回payeeMap.size(),调试时调用tableModel.payees.getPayeeMapSize()即可,不需要暴露整个Map对象。 - 已经添加
tableModel.payees.payeeMap到表达式窗口的前提下,直接展开该对象就能看到size属性,无需单独写表达式调用size()方法。 - 临时调试可以用强制类型转换绕开静态校验:
((Map)tableModel.payees.payeeMap).size(),大部分情况下可以正常求值。 - 也可以在Eclipse中配置
PayeeListMap的Detail Formatter,自定义调试预览格式直接显示Map大小,不需要每次手动写表达式。
内容的提问来源于stack exchange,提问作者arcy
相关产品推荐
相关产品推荐

