默认情况下,在Netbeans中查看对象的监视/变量时,它会显示其地址而不是其值。这非常令人厌烦,因为我必须扩展变量以查看其实际值(例如,对于Double,Integer,Date等)。事实证明,Netbeans有“可变格式化程序”,但几乎没有任何我能找到的文档。
我将如何展示例如Watches / Variables窗口中人类可读格式的简单Date变量?我不完全理解“编辑变量格式化程序”对话框。
通过使用以下代码片段,我能够正确地为Double和Integer执行此操作:
toString()
因此代码似乎在Double / Integer类的上下文中运行。如果我需要做一些更高级的事情,我将如何引用实际变量,例如:
return DateHelpers.formatDate(dateVariableName??, "yyyy-MM-dd");
答案 0 :(得分:6)
在变量视图中,您有一个小的$图标(位于左上角),工具提示说:“将变量值显示为toString()或格式化值”。
只需点击它,它就会显示这些变量的“值”。
编辑:如果你想添加一个变量格式化程序,它非常简单。在变量格式化程序视图中,只需单击“添加...”按钮,然后:
toString()
但是如果你想操纵数据或显示其他一些东西你可以。例如:
toString() + " (" + getTime() + ")"
将以人类可读格式显示时间加上长时间的时间。
不要忘记选择视图上的$图标来应用格式化程序。
答案 1 :(得分:2)
我的回答不会解决问题。它宁愿回应以前的答案。首先,我还没有在NetBeans中看到变量面板中的$符号。似乎它已被当前版本的上下文菜单所取代。
我还没有找到实际问题的答案,关于如何在变量格式化程序"变量格式化程序中引用变量进行调试。对话。像"这个"或" $ 1"绝对没有工作。此外,该工具似乎不了解像SimpleDateFormatter这样的标准Java JRE类。
因此,在调试Java JRE类时,我猜你必须接受他们在公共方法方面提供的内容。
如果您坚持使用低于版本8的JDK(就像我一样),这里是特别用户友好的Date类的解决方法。只需通过
在NetBeans中创建一个新的Variable FormatterTools > Options > Java > Variable Formatters > Add
然后在"班级类型" editfield输入:
java.util.Date
在"格式化为代码片段的结果"使用下一个片段之一。
// German format - "dd.MM.yyyy hh:mm"
((getDate() < 10) ? ("0" + getDate()) : getDate()) + "." + ((getMonth() < 9) ? ("0" + (getMonth() + 1)) : (getMonth() + 1) ) + "." + (getYear() + 1900) + " " + ((getHours() < 10) ? "0" + getHours() : getHours()) + ":" + ((getMinutes() < 10) ? "0" + getMinutes() : getMinutes()) + ":" + ((getSeconds() < 10) ? "0" + getSeconds() : getSeconds())
// US format - "MM/dd/yyyy hh:mm"
((getMonth() < 9) ? ("0" + (getMonth() + 1)) : (getMonth() + 1) ) + "/" + ((getDate() < 10) ? ("0" + getDate()) : getDate()) + "/" + (getYear() + 1900) + " " + ((getHours() < 10) ? "0" + getHours() : getHours()) + ":" + ((getMinutes() < 10) ? "0" + getMinutes() : getMinutes()) + ":" + ((getSeconds() < 10) ? "0" + getSeconds() : getSeconds())
// ISO-8601 - "yyyy-MM-dd hh:mm"
(getYear() + 1900) + "-" + ((getMonth() < 9) ? ("0" + (getMonth() + 1)) : (getMonth() + 1) ) + "-" + ((getDate() < 10) ? ("0" + getDate()) : getDate()) + " " + ((getHours() < 10) ? ("0" + getHours()) : getHours()) + ":" + ((getMinutes() < 10) ? ("0" + getMinutes()) : getMinutes()) + ":" + ((getSeconds() < 10) ? ("0" + getSeconds()) : getSeconds())
当您在java.util.Calendar实例的调试输出过量中丢失时,下一个代码段也会派上用场:
// German format - "dd.MM.yyyy hh:mm"
((get(5) < 10) ? ("0" + get(5)) : get(5)) + "." + ((get(2) < 9) ? ("0" + (get(2) + 1)) : (get(2) + 1) ) + "." + (get(1)) + " " + ((get(10) < 10) ? "0" + get(10) : get(10)) + ":" + ((get(12) < 10) ? "0" + get(12) : get(12)) + ":" + ((get(13) < 10) ? "0" + get(13) : get(13))
答案 2 :(得分:1)
只要返回一个字符串,您甚至可以在变量格式化程序中添加更复杂的代码。例如,如果我有一个包含两个字符串成员的类,名称和姓氏,我可以将以下代码粘贴到“Value formatted ..”框中:
String result;
if (name != null) {
result = name + " " + surname;
} else {
result = "<null>";
}
return result;
..并且为了单独显示姓名和姓氏,您可以将代码粘贴到“显示为...的子项”框中以返回String [],例如:
String[] results = new String[2];
results[0] = "name: " + name;
results[1] = "surname: " + surname;
return results;
这将在变量调试窗口中以名称和姓氏
显示两个节点作为子节点答案 3 :(得分:0)
变量本身可以由this
引用(至少在Netbeans 8.1中有效)。
因此,假设我们要在identityHashCode
的{{1}}之后加上大小:
Collection