Java - 私有内部类的对象,作为外部类构造函数的参数

时间:2013-04-01 23:28:27

标签: java constructor private inner-classes

public class Person
{
    private class Date
    {
        public Date(int month, int day, int year)
        {
            ...
        }
    }


    private String name;
    private Date birthDate;

    public Person(String name, Date birthDate)
    {
        ...
    }
}

上面,我有一个外部类,Person和一个私有内部类Date。 Person对象的构造函数应该将Date作为其参数之一。

public class Test
{
    public static void main(String[] args)
    {
        Person testPerson = new Person("Mr. Sandman", new Date(1, 1, 1970));
    }
}

但是当我尝试在单独的“测试”文件Test.java(上面)(与我的Person.java文件位于同一文件夹中)中创建一个Person对象时,我收到错误。

错误是这样的:“错误:没有为Person找到合适的构造函数(String,Date)” (编译器引用我实例化testPerson的行作为错误原因。)

问题:我做错了什么?另外,如何创建Person对象并将Date对象传递给Person的构造函数? (如果Date是Person的私有内部类,这甚至可能吗?)

2 个答案:

答案 0 :(得分:4)

DatePerson的私有内部类,因此您无法从另一个(非Person)类创建它的实例。两件事:

  • 为了使您当前的设计有效,请将Date的访问权限从私人更改为公开
  • 您还需要为Person类创建一个默认构造函数,因为您需要一个实例来创建内部类。
  • 请考虑更改内部班级名称。 SDK中已有Date个类。

说实话,你应该像其他人所建议的那样,将你的Date创建为一个独立的类。

答案 1 :(得分:0)

您可以添加一个新的Person构造函数,它将java.util.Date作为第二个参数,并从Person.Date对象创建一个java.util.Date对象(可能通过{{1}对象)。

你也可以让你现有的构造函数Calendar,因为没有人能够使用它。