0

参照型であるクラス「Person」(クラスを作成した「Date」)にインスタンス変数を追加しています。したがって、 Person クラスのコンストラクターで、 Date クラスのコンストラクターを使用して Date 属性を初期化しようとしていますが、これを行う方法がわかりません。以下に示すように、以前はプリミティブ型 (または文字列) しか初期化していませんでした。これは私のコードの一部です。Date クラスのコンストラクターを使用するように「birthday」を初期化する方法がわかりません。ありがとう!

public class Person {

/* Attribute declarations */
private String lastName;    // last name
private String firstName;   // first name
private String email;       // email address
private Date birthday;  // birth date

/**
 * Constructor initializes the person's name, email address, and birthday
 */
public Person(String firstName, String lastName, String email, Date birthday) {
    this.firstName = firstName;
    this.lastName = lastName;       
    this.email = email;
    this.birthday = ????
4

3 に答える 3

1

this.birthdayDate コンストラクターを使用して Person のコンストラクターで初期化したいということですか? 次に、次のnewようにキーワードを使用します。

this.birthday = new Date(<arguments if any exist>);

newオブジェクトのコンストラクターを呼び出します。その場合は、別のDate birthday目的で使用しない限り、Person のコンストラクター引数は必要ありません。

于 2013-06-30T23:36:09.133 に答える
1

あなたはこれを行うことができます:

this.birthday = new Date(birthday.getTime());

これにより、日付オブジェクトのコピーが作成されます。Date は変更できるため、参照をコピーした場合と同じオブジェクトを使用するのは危険です。

this.birthday = birthday;

そうすれば、あなたが知らないうちに外の世界があなたの誕生日を変更できるようになります。

于 2013-06-30T23:27:11.837 に答える
0

シンプルにできる

this.birthday = (Date) birthday.clone();

なぜこの方法ではなく?

this.birthday = birthday;

部外者が日付オブジェクトを変更できるため、内部構造が変更され、カプセル化が壊れてしまいます。

なぜこの方法ではなく?

this.birthday = new Date(birthday.getTime());

日付は最終クラスではありません。渡すとどうなるかDate objectは「真の日付」ではなく、サブクラスです。これを行うと、サブクラスの内部構造は保持されませんが、クローンを作成すると情報が保持されますが、このアプローチは依存しますあなたが欲しいもの。

于 2013-07-01T01:48:39.127 に答える