【问题标题】:How to use Netbeans Variable Formatters?如何使用 Netbeans 变量格式化程序?
【发布时间】:2011-10-27 12:10:53
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: netbeans


    【解决方案1】:

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

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

    编辑:如果你想添加一个变量格式化程序,这很简单。在变量格式化程序视图中,只需单击“添加...”按钮即可:

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

    toString()

    但如果您想操作数据或显示其他内容,您可以。例如:

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

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

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

    【讨论】:

    • 我怎么会错过这个!一定是不小心关掉了。谢谢!是否可以将变量作为参数传递给对话框中的方法(负责格式化)?它有一些默认名称吗?
    • 对不起,我也想知道,但我不知道。
    【解决方案2】:

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

    在“变量格式化程序”对话框中,关于如何引用要调试的变量,我还没有找到实际问题的答案。像“this”或“$1”这样的东西肯定不起作用。此外,该设施似乎不了解 SimpleDateFormatter 等标准 Java JRE 类。

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

    如果您遇到低于版本 8 的 JDK(如我),这里有一个特别用户友好的 Date 类的解决方法。只需通过

    在 NetBeans 中创建一个新的变量格式化程序
    Tools > Options > Java > Variable Formatters > Add
    

    然后在“类类型”编辑字段中输入:

    java.util.Date
    

    在“由代码 sn-p 格式化的值”下使用下一个 sn-ps 之一。

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

    下一个 sn-p 也可以派上用场,当您迷失在 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))
    

    【讨论】:

    • 在 netbeans 8 上,$ 符号功能似乎可以直接作为表格模式下变量监视视图中的额外列使用
    • 知道了。谢谢。尽管如此,对于上面关于日历类的示例,您需要一个如图所示的变量格式化程序,以便在该列中放置一个有意义的值。要再次参考原始问题,您尝试调试的实例的类总是必须提供一个方法,例如getValue() 在变量格式化程序中使用它。
    【解决方案3】:

    您甚至可以在变量格式化程序中放入更复杂的代码,只要您返回一个字符串。例如,如果我有一个包含两个字符串成员的类,name 和 surname,我可以将以下代码粘贴到“Value formatted..”框中:

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

    .. 为了将姓名和姓氏分别显示为孩子,您可以在“孩子显示为..”框中粘贴代码以返回字符串[],例如:

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

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

    【讨论】:

      【解决方案4】:

      变量本身可以被this 引用(至少它在Netbeans 8.1 中有效)。 所以,假设我们想要CollectionidentityHashCode 在其大小之后:

      "size = " +size() + " #" + System.identityHashCode(this)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-11
        • 1970-01-01
        • 2019-01-20
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        • 2017-04-06
        • 1970-01-01
        相关资源
        最近更新 更多