如何使用Netbeans变量格式化器



在Netbeans中查看对象的表/变量时,默认显示其地址而不是其值。这是相当烦人的,因为我必须展开变量以查看其实际值(例如,对于Double, Integer, Date等)。事实证明,Netbeans有"可变格式化器",但几乎没有任何文档,我可以找到它。

如何在手表/变量窗口中以人类可读的格式显示一个简单的日期变量?我不完全理解"编辑变量格式化器"对话框。

我能够通过使用以下代码片段正确地为Double和Integer做这件事:toString()

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

,我将如何引用实际变量:
return DateHelpers.formatDate(dateVariableName??, "yyyy-MM-dd");

在变量视图中,你有一个小的$图标(在左上角),工具提示说:"显示变量值为toString()或格式化值"

点击它,它会显示这些变量的"值"。

编辑:如果你想添加一个变量格式化器,这是非常简单的。在变量格式化器视图中,只需点击"添加…"按钮,然后:

  • 在"格式化程序名称"中输入格式化程序的名称。"My Date formatter"
  • "类类型"填写完整的类名。java.util.Date
  • 选择"作为代码片段的结果格式化的值",并键入要应用的代码。例如:

toString()

,但如果你想操作数据或显示其他东西,你可以。例如:

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

它将以人类可读的格式显示时间,并以长格式显示时间。

别忘了选择视图上的$图标来应用你的格式化器

我的回答不能解决问题。这将与之前的答案相呼应。首先,我在NetBeans的变量面板中没有看到$符号。在当前版本中,它似乎被上下文菜单取代了。

我还没有找到实际问题的答案,就像你如何在"变量格式化器"对话框中引用变量进行调试一样。像"这个"或"1美元"这样的东西肯定不起作用。此外,该工具似乎不知道标准Java JRE类,如SimpleDateFormatter。

因此,当调试Java JRE类时,我猜您必须接受它们提供的公共方法。

如果你使用的JDK版本低于8(像我一样),那么这里有一个特别适合用户友好的Date类的变通方法。只需在NetBeans中通过

创建一个新的变量格式化器
Tools > Options > Java > Variable Formatters > Add

然后在"Class Types"编辑字段中输入:

java.util.Date

在"Value formatting as result of code snippet"下使用下一个代码段。

// 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))

您甚至可以在变量formatter中放入更复杂的代码,只要返回字符串即可。例如,如果我有一个类,它有两个字符串成员,名字和姓氏,我可以将以下代码粘贴到"Value formatting ."框中:

String result;
if (name != null) {
  result = name + " " + surname;
} else {
  result = "<null>";
}
return result;

. .如果要将名字和姓氏分别显示为孩子,你可以在"children display as.."框中粘贴一个代码,返回一个字符串[],例如:

String[] results = new String[2];
results[0] = "name: " + name;
results[1] = "surname: " + surname;
return results;

这将在变量调试窗口中显示两个节点作为子节点,其名称和姓氏为

变量本身可以被this引用(至少它在Netbeans 8.1中有效)。因此,假设我们希望CollectionidentityHashCode位于其大小

之后。
"size = " +size() + " #" + System.identityHashCode(this)

最新更新