2

Java リフレクションなしで深いオブジェクトのクローン作成を行う可能性は何ですか? リフレクションを使用するオブジェクト クローン ライブラリを使用しましたが、AppEngine ではそれが許可されていません。

そのため、Tomcat で動作する既存のアプリケーションは動作しません。

アップデート:

Dozer ライブラリが最善の策のようです。

Mapper mapper = new DozerBeanMapper();
DestinationObject destObject =  mapper.map(sourceObject, DestinationObject.class);

質問は、カスタム マッピングが必要ない場合、上記をそのまま実行できますか?

例えば:

Cat cat = new Cat();

Mapper mapper = new DozerBeanMapper();
Cat newCat =  mapper.map(cat, Cat.class);

アップデート:

Dozer でアプリを実行すると、次のエラーが発生します。

Caused by: java.lang.NoSuchMethodError: org.apache.commons.lang.StringUtils.contains(Ljava/lang/String;Ljava/lang/String;)Z
    at org.dozer.util.ResourceLoader.getResource(ResourceLoader.java:53)
    at org.dozer.util.DefaultClassLoader.loadResource(DefaultClassLoader.java:44)
    at org.dozer.config.GlobalSettings.loadGlobalSettings(GlobalSettings.java:116)
    at org.dozer.config.GlobalSettings.<init>(GlobalSettings.java:67)
    at org.dozer.config.GlobalSettings.<clinit>(GlobalSettings.java:46)

Maven を使用して Dozer を追加しましたが、何かが足りないようです。

4

3 に答える 3

3

clone()クラスのメソッドをオーバーライドするだけで、いつでも手動でディープクローンを作成できます。非常に反復的な作業ですが、実行可能です。また、リフレクションを使用するよりも効率的です。

于 2012-11-02T16:33:29.033 に答える
3

Dozer の使用を検討しましたか?

【自社サイトより】

Dozer は、あるオブジェクトから別のオブジェクトにデータを再帰的にコピーする Java Bean から Java Bean へのマッパーです。通常、これらの Java Bean は異なる複合型になります。

Dozer は、単純なプロパティ マッピング、複雑な型マッピング、双方向マッピング、暗黙的明示的マッピング、および再帰的マッピングをサポートしています。これには、要素レベルでのマッピングも必要なコレクション属性のマッピングが含まれます。

Dozer は、属性名間のマッピングをサポートするだけでなく、タイプ間の自動変換もサポートします。ほとんどの変換シナリオは標準でサポートされていますが、Dozer では XML を介してカスタム変換を指定することもできます。

于 2012-11-02T16:37:25.140 に答える
0

ObjectOutputStream/ObjectInputStreamを試すことができます。これはリフレクションを使用しますが、直接呼び出していないため、SecurityManagerで許可される場合があります。

于 2012-11-02T16:34:46.233 に答える