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

标签 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 和一个私有(private)内部类 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 对象时,(上图)(与我的 Person.java 文件位于同一文件夹中),我收到一个错误。

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

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

最佳答案

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

  • 为了使您当前的设计正常工作,将Date 的访问权限从私有(private)更改为公共(public)
  • 您还需要为 Person 类创建一个默认构造函数,因为您需要它的一个实例来创建内部类。
  • 请考虑更改您的内部类名称。 SDK 中已有一个Date 类。

老实说,您应该按照其他人的建议,将Date 创建为一个独立的类。

关于Java - 私有(private)内部类的对象作为外部类构造函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15753643/

相关文章:

c++ - 如何使用公共(public)函数访问私有(private)变量?

java - 如何让 XSLT 在输出数值运算结果时停止使用科学记数法?

java - 当我尝试调用 super 构造函数时,复制构造函数生成错误

java - 继承中的私有(private)方法

java - 类方法如何访问同一类的另一个实例的私有(private)成员?

C++ 构造函数的乐趣——用自身的拷贝构造 Foo

java - 使用递归反转字符串

java - 二维数组的归一化

java - 如何获取设备的总存储大小?

c++ - C++ 标准对于从类型 a 转换为类型 b 与实例化/构造类型 b 之间的区别有何规​​定?