如何使用Netbeans Variable Formatters?

时间:2011-10-27 12:10:54

标签: netbeans

默认情况下,在Netbeans中查看对象的监视/变量时,它会显示其地址而不是其值。这非常令人厌烦,因为我必须扩展变量以查看其实际值(例如,对于Double,Integer,Date等)。事实证明,Netbeans有“可变格式化程序”,但几乎没有任何我能找到的文档。

我将如何展示例如Watches / Variables窗口中人类可读格式的简单Date变量?我不完全理解“编辑变量格式化程序”对话框。

通过使用以下代码片段,我能够正确地为Double和Integer执行此操作: toString()

因此代码似乎在Double / Integer类的上下文中运行。如果我需要做一些更高级的事情,我将如何引用实际变量,例如:

return DateHelpers.formatDate(dateVariableName??, "yyyy-MM-dd");

4 个答案:

答案 0 :(得分:6)

在变量视图中,您有一个小的$图标(位于左上角),工具提示说:“将变量值显示为toString()或格式化值”。

只需点击它,它就会显示这些变量的“值”。

编辑:如果你想添加一个变量格式化程序,它非常简单。在变量格式化程序视图中,只需单击“添加...”按钮,然后:

  • 在“格式化程序名称”中输入格式化程序的名称,例如。 “我的日期格式化程序”
  • “班级类型”将您的完整班级名称列为例如。 java.util.Date
  • 选择“作为代码段结果格式化的值”,然后键入要应用的代码。例如:

toString()

但是如果你想操纵数据或显示其他一些东西你可以。例如:

toString() + " (" + getTime() + ")"

将以人类可读格式显示时间加上长时间的时间。

不要忘记选择视图上的$图标来应用格式化程序。

答案 1 :(得分:2)

我的回答不会解决问题。它宁愿回应以前的答案。首先,我还没有在NetBeans中看到变量面板中的$符号。似乎它已被当前版本的上下文菜单所取代。

我还没有找到实际问题的答案,关于如何在变量格式化程序"变量格式化程序中引用变量进行调试。对话。像"这个"或" $ 1"绝对没有工作。此外,该工具似乎不了解像SimpleDateFormatter这样的标准Java JRE类。

因此,在调试Java JRE类时,我猜你必须接受他们在公共方法方面提供的内容。

如果您坚持使用低于版本8的JDK(就像我一样),这里是特别用户友好的Date类的解决方法。只需通过

在NetBeans中创建一个新的Variable Formatter
Tools > 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