1
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 オブジェクトのコンストラクターは、引数の 1 つとして 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 のプライベートな内部クラスである場合でも可能ですか?)

4

2 に答える 2

4

Dateは のプライベート 内部クラスでPersonあるため、別の (Person 以外の) クラスからそのインスタンスを作成することはできません。2つのこと:

  • 現在の設計を機能させるには、アクセスをDateプライベートからパブリックに変更します
  • Person内部クラスを作成するにはインスタンスが必要なため、クラスのデフォルト コンストラクターも作成する必要があります。
  • 内部クラス名の変更を検討してください。DateSDK には既にクラスがあります。

正直に言うと、Date他の人が示唆しているように、スタンドアロン クラスとして作成する必要があります。

于 2013-04-01T23:31:41.577 に答える