2

ここにある列挙型の Java チュートリアルを読んでいて、質問があります: http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html#Card

私が混乱している部分は次のとおりです。

「上記の Card クラスには、デッキを返す静的ファクトリが含まれていますが、ランクとスーツから個々のカードを取得する方法はありません。コンストラクターを公開するだけでは、シングルトン プロパティ (各カードの単一のインスタンスのみ) が破棄されます。ネストされた EnumMap を使用して、シングルトン プロパティを保持する静的ファクトリを作成する方法を次に示します。

私が理解しているように、元のプライベート「カード」コンストラクターをパブリックに変更すると、特定のスーツ+ランクを持つ「カード」オブジェクトのコピーを無制限にインスタンス化できます。提案された解決策は、ランクをキーとする 13 個の Card オブジェクトを含む 4 つのマップ (スートごとに 1 つ) を格納する EnumMap を作成することでした。

したがって、デッキから特定の Card オブジェクトを取得したい場合は、「valueOf」メソッドを呼び出すだけです。私の質問は、 valueOf メソッドを好きなだけ呼び出すことを妨げているのは何ですか? それは、元のプライベート コンストラクターをパブリックにするのと同じ問題につながるのではないでしょうか。

ありがとう。

4

1 に答える 1

1

いいえvalueOf()、常に同じインスタンスが返されます。注意してください、実際にはstaticブロック内で一度すべてをインスタンス化しています。

于 2010-05-25T08:14:26.560 に答える