Eclipse toString源生成器非常有用,除非对象包含Calendar对象。有没有办法更改Eclipse toString生成器以更干净地显示Calendar对象? 可能使用常见的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带领我找到了解决方案。这是一个快速而又脏的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;
}
}
谢谢!
答案 0 :(得分:6)
以下内容有效地覆盖了任何类的toString()方法,如使用Eclipse Debugger所见,但我发现在调试时解码日历对象非常有用。
使用以下步骤添加调试详细信息格式化程序:
例如,对于日历对象:
输入以下内容:
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(“EEE,d MMM yyyy HH:mm:ss Z”); sdf.format(this.getTime());
确保选中“启用此详细信息格式化程序”
答案 1 :(得分:3)
在eclipse中生成toString方法时,该对话框具有“代码样式”选项。在该列表中是“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
答案 2 :(得分:2)
Eclipse只使用GregorianCalendar.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());
}
}
答案 3 :(得分:0)
toString()的目的是给出对象状态的字符串表示。这非常适合调试和记录。
除了最简单的定义对象格式的情况外,它不应该用作UI类型标签。 toString()没有合同,这将保证一致的结果或格式。如果您希望从对象输出特定类型的输出以供用户显示,则可以专门为此编写方法。不要使用toString()。
在OP的具体案例中,有十几种不同的方式来表示日期。这就是为什么有日期格式化类来呈现一致的输出。