如何更改Eclipse toString代码生成器以显示更简洁的Calendar对象

Hea*_*vyE 5 java eclipse

Eclipse toString源生成器非常有用,除非对象包含Calendar对象.有没有办法更改Eclipse toString生成器以更干净地显示Calendar对象?可能使用常见的SimpleDateFormat?还是一个值得信赖的插件?

所需的日历toString("yyyy-MM-dd HH:mm:ss"):

2011-08-22 13:29:26
Run Code Online (Sandbox Code Playgroud)

示例Eclipse Calendar toString(这非常荒谬):

java.util.GregorianCalendar[time=1314034166984,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="America/New_York",offset=-18000000,dstSavings=3600000,useDaylight=true,transitions=235,lastRule=java.util.SimpleTimeZone[id=America/New_York,offset=-18000000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2011,MONTH=7,WEEK_OF_YEAR=35,WEEK_OF_MONTH=4,DAY_OF_MONTH=22,DAY_OF_YEAR=234,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=1,HOUR_OF_DAY=13,MINUTE=29,SECOND=26,MILLISECOND=984,ZONE_OFFSET=-18000000,DST_OFFSET=3600000]
Run Code Online (Sandbox Code Playgroud)

FuryComputers带领我找到了解决方案.这是一个快速而又脏的Custom toString实现:

import java.text.SimpleDateFormat;
import java.util.Calendar;

public class MyToStringBuilder {
    private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
    private String str;
    private boolean isFirst;

    public MyToStringBuilder(Object o) {
        isFirst = true;
        str = "";
        str += o.getClass().getSimpleName() + " [";
    }

    public MyToStringBuilder appendItem(String variableName, Object value) {
        if(value != null){
            this.addItem(variableName, value.toString());
        } else {
            this.addItem(variableName, "null");
        }
        return this;
    }

    public MyToStringBuilder appendItem(String variableName, Calendar value) {
        if(value != null){
            SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
            this.addItem(variableName, sdf.format(value.getTime()));
        } else {
            this.addItem(variableName, "null");
        }
        return this;
    }

    private void addItem(String variableName, String value) {
        if(!isFirst){
            str += ", ";
        }
        isFirst = false;
        str += variableName + "=";
        str += value;
    }

    @Override
    public String toString() {
        str += "]";
        return str;
    }

}
Run Code Online (Sandbox Code Playgroud)

谢谢!

gdw*_*dw2 6

以下有效地覆盖了任何类的toString()方法,如使用Eclipse Debugger所见,但我发现在调试时解码日历对象非常有用.

使用以下步骤添加调试详细信息格式化程序:

  1. 从菜单中选择Windows-> Preferences
  2. 在Preferences中打开Java-> Debug并单击Detail Formatters
  3. 在这里,您可以添加所需的格式化程序

例如,对于日历对象:

  1. 单击添加..
  2. 在限定类型名称字段中输入java.util.Calendar
  3. 输入以下内容:

    java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("EEE,d MMM yyyy HH:mm:ss Z"); sdf.format(this.getTime());

  4. 确保选中启用此详细信息格式化程序

  5. 单击确定.

(来源:http://acoderslife.wordpress.com/2009/06/12/eclipse-java-debugging-showing-variable-type-values-calendar/)


Fur*_*ers 3

当您在 eclipse 中生成 toString 方法时,该对话框有一个“代码样式”选项。该列表中有“Custom toString() Builder”,您可以定义自己的 String Builder 类型类来使用。

它(很差)记录在“自定义 toString() 构建器”下 http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/ref-tostring-样式.htm