1

Java のクローンは、可能な限り決して使用すべきではないという程度に壊れているというコンセンサスがあるようです。

クローンが適切なツールのように見える状況がありますが、別の方法があるかどうか疑問に思っています:

mongo データベースにさまざまなオブジェクトが格納されています。これらは Morphia を使用して保存およびロードされ、正しいクラスとプロパティを持つオブジェクトが自動的に返されます。

場合によっては、データベースに保存されているのは、コピーを作成したいオブジェクトの「プロトタイプ」です。それは正しいクラスとデフォルト値でモルフィアから出てきます。クラスとデフォルト値を保持するコピーを作成できるようにしたいと考えています。例えば:

achievementPrototype = morphia.get(id); playerAchievements.add(achievementPrototype.clone());

achievementPrototype は、AbstractAchievement の具体的な実装であるクラスのものです。クローンは私が望むことをしているようです。実績にプロパティとしてオブジェクトがある場合、それらのクローンを実装する必要があることは承知していますが、それで問題ありません。

clone() を使用する必要がありますか? そうでない場合は、何を使用すればよいですか?

4

2 に答える 2

1

壊れているわけではありませんが、変更しない限り、ほとんどの場合は機能しません。オブジェクトを公開するには、Cloneable を実装し、clone() メソッドをオーバーライドする必要があります。これには、私が個人的に好むいくつかの代替手段があります。

BeanUtils:
BeanUtils.cloneBean(objectToClone)は、Object.clone() で作成されるものと同様の浅いクローンを作成します。

SerializationUtils:
SerializationUtils.clone(objectToClone)はディープ クローンを作成しますが、これは探しているかもしれませんが、すべてのオブジェクトは Serializable を実装する必要があります。

于 2013-10-22T16:56:14.723 に答える
0

後で保存して新しい ID を取得できる新しいオブジェクトを作成してデータベースにコピーしたいだけの場合は、ID フィールドをクリアするだけで、morphia がそれらのオブジェクトを再度保存しようとすると、新しいオブジェクトと見なされます。 ID を持たず、新しい ID を生成します。

于 2013-10-22T17:16:21.230 に答える