禁用变量视图中的逻辑结构显示

Izr*_*ruo 6 java eclipse

如何在 Eclipse 的变量视图中禁用逻辑结构的特殊处理?

概括

java.util.Collection实现或 的类java.util.Map通过调用相应的方法来呈现 [entrySet().]toArray(),并以树状结构显示。

相应的首选项页面是,其中和Java -> Debug -> Logical Structures的定义是预定义的,不能更改或禁用。java.util.Collectionjava.util.Map

我的具体情况

每当代码在调试模式下进入我的集合类时,它都会立即尝试toArray()在后台调用(1)(可能是由于变量视图this中存在节点)。然而,在某些时候,班级还没有做好准备,就会崩溃。

我完全意识到像这样的方法toArray()应该没有副作用,并且在我当前正在从事的项目中,我可以安全地将它们留空以用于开发阶段(或修改它们,这样它们就不会伤害我),但是我想用“日食方式”来处理这个问题。
因此,如果例如toArray()需要调试自身的代码,情况会更糟(基本上是不可避免的)。

笔记

(1)确认码

@Override
public Object[] toArray() {
    new Exception("toArray was called").printStackTrace(System.out);
    return super.toArray();
}
Run Code Online (Sandbox Code Playgroud)

然而,生成的堆栈跟踪完全被破坏了;我没有toArray()在第 45 行调用它Testing(我什至没有这样的对象引用),但这是我在 EclipsetoArray()启动时调试的行。

@Override
public Object[] toArray() {
    new Exception("toArray was called").printStackTrace(System.out);
    return super.toArray();
}
Run Code Online (Sandbox Code Playgroud)

Izr*_*ruo 3

在这种情况下,“日食方式”并不是禁用现有功能,而是用另一个更精确的功能覆盖它。

特别是,这意味着在已经提到的首选项页面中添加另一个定义,该定义指的是比 更精确的类型java.util.CollectionSAXParser.CursorObject为了这个示例而忽略匿名内部类型 - 实际上必须使用它的超类)。

这将切断对toArray()的所有实例的不需要的调用SAXParser.CursorObject,但对 的所有其他实例保留相同的行为java.util.Collection

所以,简而言之:

  1. Java -> Debug -> Logical Structures
  2. Add...
  3. 选择要“禁用”其行为的类。
  4. 添加描述(因为 eclipse 会强制你这样做)。
  5. 插入不会伤害您的代码。