如果我重载toString()
,IntelliJ中的调试器会在变量选项卡中显示相关对象附近的Object.toString()
结果。
如果toString
超载了return "Test1: This is toString overload";
:
有时,我想在调试中看到的内容与一般toString
重载相同。我知道可以为特定类型/类/等设置另一个表达式,但只能从设置中设置。
当存在这样的函数时,有没有办法(全局)设置一个优先于toString
的任意函数名?
例如:
如果Object.toDebuggerString()
存在,请使用它,否则 - 使用Object.toString()
。
class Test1 {
@Override
public String toString() {
return "Test1";
}
}
class Test2 {
@Override
public String toString() {
return "Test2";
}
public String toDebuggerString() {
return "Testing debugging mode";
}
}
答案 0 :(得分:2)
您可以添加自己的。
interface Debuggable {
String toDebugString();
}
然后右键单击调试器中的变量 - >自定义数据视图 - > Java类型渲染器 - > + - > type:Debuggable
将来任何程序都可以为此类型的任何对象执行此操作。
答案 1 :(得分:2)
基于其他答案,我想到了一个静态类,它将为调试器提供正确的调试字符串。
所以我创建了这样的类,它减少了配置这些数据视图所需的步骤数,并使其更加灵活和舒适。
Objects
设置常量表达式。 [*] toDebugString()
方法,如果存在,该类将提供它。否则,如果覆盖toString()
,它将使用它,如果不存在 - 它将使用defualt Object.toString()
。[*] 此步骤只需执行一次,因为IntelliJ会将其保留在全局设置中。
在我的GitLab上公开发布 - IntelliJ-CustomDebugDataView
答案 2 :(得分:1)
您可以按Alt-F8
并评估任意表达式。例如,键入test1.toDebuggerString()
并按Ctrl-Enter
。然后按Ctrl-Shift-Enter
将其值添加到观察窗口。
请注意变量名称左侧的三角形。这比仅使用不同的toDebuggerString()
方法更有用。单击三角形以查看所有成员字段的值。