如何更改Eclipse toString代码生成器以显示不那么详细的Calendar对象?



Eclipse toString源生成器非常有用,除非对象包含Calendar对象。是否有一种方法可以更改Eclipse toString生成器以更干净地显示日历对象?可能使用一个共同的SimpleDateFormat?还是一个值得信赖的插件?

期望日历toString ("yyyy-MM-dd HH:mm:ss"):

2011-08-22 13:29:26

示例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]
FuryComputers让我找到了一个解决方案。下面是一个快速而粗糙的自定义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;
    }
}

谢谢!

下面的代码有效地覆盖了任何类的toString()方法,就像只使用Eclipse调试器看到的那样,但是我发现它在调试时解码日历对象时非常有用。

使用以下步骤添加调试细节格式化器:

  1. 从菜单中选择Windows->Preferences
  2. 在首选项中打开Java->Debug并单击Detail Formatters
  3. 在这里你可以添加你想要的格式化器
例如,对于日历对象:
  1. 单击Add…
  2. 在限定类型名称字段
  3. 中输入java.util.Calendar
  4. 输入如下:

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

  5. 确保启用此详细格式化程序

  6. 单击OK。

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

当您在eclipse中生成toString方法时,对话框中有一个"Code Style"选项。在这个列表中是"Custom toString() Builder",你可以定义你自己的String Builder类型类来使用。

在"Custom toString() builder"下有(不太好的)文档。http://help.eclipse.org/galileo/index.jsp?topic=/org.eclipse.jdt.doc.user/reference/ref-tostring-styles.htm

Eclipse只使用gregorianccalendar . tostring()方法。改变这种情况的唯一方法是在自己的Object中扩展GregorianCalendar类,并实现自定义toString()方法。

import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
public class MyGregorianCalendar extends GregorianCalendar
{
    public MyGregorianCalendar() {
        super();
    }
    SimpleDateFormat sdf = new SimpleDateFormat("H:MM:d kk:m:s");
    public String toString() {
        return sdf.format(getTime());
    }
}

toString()的目的是给出对象状态的字符串表示。这对于调试和日志记录非常有用。

除了对象格式定义良好的最简单情况外,它不应该用作UI类型标签。toString()没有保证结果或格式一致的契约。如果您希望从对象中获得特定类型的输出以供用户显示,那么就为此专门编写一个方法。不要对它使用toString()

在OP的特定情况下,有十几种不同的方式来表示日期。这就是为什么有日期格式化类来呈现一致的输出。

最新更新