Java 如何解决此NullPointerException问题?
在这里,我收到了一个Java 如何解决此NullPointerException问题?,java,date,nullpointerexception,return-type,Java,Date,Nullpointerexception,Return Type,在这里,我收到了一个NullPointerException问题,它似乎与我的类中的日期对象有关,但我无法解决它。 我的老师说,除了我为date类返回了错误的数据类型之外,一切都正常,但我知道我返回的是字符串,毕竟,这就是getDate()方法返回的结果 我已经尝试为getDate()方法本身输入代码,如 “getMonth()+”/“+getDay()+”/“+getYear(); 这不应该是一个错误,我审查了这个代码数百次,一切似乎都很好 public void setDateHired(i
NullPointerException
问题,它似乎与我的类中的日期对象有关,但我无法解决它。我的老师说,除了我为date类返回了错误的数据类型之外,一切都正常,但我知道我返回的是字符串,毕竟,这就是
getDate()
方法返回的结果
我已经尝试为getDate()
方法本身输入代码,如“getMonth()+”/“+getDay()+”/“+getYear();
这不应该是一个错误,我审查了这个代码数百次,一切似乎都很好
public void setDateHired(int m, int d, int y)
{
//dateHired is a local variable.. you're not modifying the class instance variable.
Date dateHired = new Date(m,d,y);
}
应该是:
public void setDateHired(int m, int d, int y)
{
this.dateHired = new Date(m,d,y);
//or:
//dateHired = new Date(m,d,y);
}
dateHired = LocalDate.of(y, m, d);
在讨论实际问题之前,你必须
private Date dateHired;
我建议您不要使用Date
类。它的设计总是很糟糕,现在已经过时很久了。尽管它的名称,但它也不代表日期,而是代表全球有两到三个不同日期的时刻。相反,请使用java.time中的LocalDate
,这是现代java日期和时间API。使用底部的教程链接
对于NullPointerException
Brandon已经从以下行解释了这是如何产生的:
Date dateHired = new Date(m,d,y);
使用LocalDate
行应为:
public void setDateHired(int m, int d, int y)
{
this.dateHired = new Date(m,d,y);
//or:
//dateHired = new Date(m,d,y);
}
dateHired = LocalDate.of(y, m, d);
在newdate(m,d,y)
中,您的参数顺序错误,您错误地处理年份和月份,并且您使用的构造函数已经被弃用了几十年,永远不要这样做
我的老师说,除了我还书以外,一切都正常
date类的数据类型错误,但我知道我返回的是字符串,
毕竟,这就是getDate()方法返回的结果
getDate
方法也被弃用了很长时间,也不要使用该方法。它也不会给你完整的日期,而且你的老师是正确的,它不会返回字符串,它会返回一个int
我已经尝试输入getDate()方法本身的代码,如
getMonth()+“/”+getDay()+“/”+getYear();
不过,与其感到惊讶和困惑,不如使用格式化程序将LocalDate
格式化为字符串
protected String getDateHired()
{
DateTimeFormatter dateFormatter
= DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT);
return dateHired.format(dateFormatter);
}
假设美国地区和雇用日期为2018年12月1日,此方法的输出示例:
2018年12月1日
ofcalizeddate
为您提供了默认区域设置的格式化程序,因此,如果您的区域设置与我们不同,您可能会惊喜地发现字符串的格式比引用的示例更符合您的期望。通常会将格式化程序声明为常量(类中的静态final
变量),但我不确定您是否已经了解了这一点,所以在本例中我没有
长话短说:正确使用过时的Date
类要比你想象的困难得多,因为它的设计很差。不要与之抗争。现代LocalDate
的使用更加自然。它以与人类相同的方式计算年份和月份(至少从公元1年开始)而且它的方法名称更清晰,只需提到其中的几个优点
教程链接:解释如何使用java.time。它没有回答您的问题,但是
Date
类设计不好,很早就过时了,尽管它的名称不代表日期。我建议您使用现代的LocalDate
。