gpt4 book ai didi

java - 是否可以在另一个类中重写一个类的方法?

转载 作者:行者123 更新时间:2023-12-02 01:36:25 24 4
gpt4 key购买 nike

是否可以通过另一个类重写另一个类中的 toString() 方法,这样您就不必重写整个类来重写一个方法?例如,我想用这一段代码重写Calendar类中的toString()方法:

public String toString() {
Date date = getTime();
DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
return dateFormat.format(date);
}

这样它就会返回类似的内容,

17/03/2019

而不是像这样几乎不可读的字符串,

java.util.GregorianCalendar[time=1552855726815,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=2019,MONTH=2,WEEK_OF_YEAR=12,WEEK_OF_MONTH=4,DAY_OF_MONTH=17,DAY_OF_YEAR=76,DAY_OF_WEEK=1,DAY_OF_WEEK_IN_MONTH=3,AM_PM=1,HOUR=4,HOUR_OF_DAY=16,MINUTE=48,SECOND=46,MILLISECOND=815,ZONE_OFFSET=-18000000,DST_OFFSET=3600000]

如果没有,我可以就如何编写一个方法来完成类似的事情提供一些建议吗?

最佳答案

请允许我提出一种不同的方法。

将模型和业务逻辑与用户界面分开。日期属于您的模型。日期的字符串表示形式属于接口(interface)。

在您的模型中,使用 LocalDate 作为日期。在任何情况下都不要使用旧的 CalendarDateSimpleDateFormat。这些类设计得很糟糕并且早已过时。

在您的界面中,使用 DateTimeFormatter 将模型中的 LocalDate 格式化为适合用户的字符串。更喜欢使用内置的本地化格式,而不是从格式模式字符串构建自己的格式。

有时,拥有一个带有 toString 方法的对象会很好,该方法可以提供适合演示的字符串。例如,如果我们想在 JList 中呈现我们的对象,就可能出现这种情况。在这种情况下,将您的业务对象包装在 UI 对象中,例如如下所示:

public class PresentableDate {

private static final DateTimeFormatter dateFormatter = DateTimeFormatter
.ofLocalizedDate(FormatStyle.SHORT)
.withLocale(Locale.CANADA_FRENCH);

LocalDate date;

public PresentableDate(LocalDate date) {
this.date = date;
}

@Override
public String toString() {
return date.format(dateFormatter);
}

}

请仅将此类保留在您的 UI 代码中。例如,如果模型需要选定的日期,请从 PresentableDate 中取出 LocalDate,然后仅将 LocalDate 传回模型。 PresentableDate 类似于 Louis Wasserman 建议的装饰器 in a comment 。它遵循组合优于继承原则。

只是为了证明 toString 方法有效:

    System.out.println(new PresentableDate(LocalDate.now(ZoneId.of("America/Toronto"))));

输出:

19-03-18

链接

关于java - 是否可以在另一个类中重写一个类的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55211852/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com