Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何解决此NullPointerException问题?_Java_Date_Nullpointerexception_Return Type - Fatal编程技术网

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