首页 > 解决方案 > Java 构造函数空对象

问题描述

我第一次在这里问,如果问得不好,很抱歉

public class Person
{
    private String name;
    private Date born;
    private Date died; //null indicates still alive.
    
    public Person(String initialName, Date birthDate, Date deathDate)
    {
        if (consistent(birthDate, deathDate))
        {
            name = initialName;
            born = new Date(birthDate);

            if (deathDate == null)
            {
                 died = null; 
            }
            else
            {
                 died = new Date(deathDate);
            }
        }
        else
        {
            System.out.println("Inconsistent dates.Aborting.");
            System.exit(0);
        }
    }
}

我的书中有这段代码。它只是代码的一部分,它不是完整的代码。我只复制了我所询问的部分。我的问题是。我们不能只删除if (deathDate == null). 如果是null,那么无论如何died都会null

标签: javaconstructornullnew-operator

解决方案


继续阅读。有一个else说法。您的建议是替换它:

if (deathDate == null) died = null;
else died = new Date(deathDate);

和:

died = new Date(deathDate);

这是行不通的;这将归结为new Date(null)将引发 NullPointerException。

注意:这是疯狂的代码。当先决条件失败(日期不一致)时,您将引发异常。您不会将某些内容打印到标准错误并退出整个 VM。将最后两行替换为throw new IllegalArgumentException("Death date cannot be before birth date. Death: " + death + " birth: " +birth);.


推荐阅读