この記事は Java オブジェクト レプリケーションの詳細な分析と紹介です。必要な方は参照してください。
Java 自体には、オブジェクトをコピーする機能が備わっています。 protected メソッドであるため、サブクラスはこのメソッドをオーバーライドしてパブリック型として宣言する必要があり、また、オブジェクトをコピーする機能を提供する Cloneable インターフェイスを実装する必要があります。Clone() はネイティブ メソッドであり、ネイティブ メソッドの効率は次のとおりです。一般に、非ネイティブのメソッドよりもはるかに高いため、パフォーマンスを重視する場合は、この種のコピーの例がインターネット上にたくさんあるため、これについては詳しく説明しません。ここで使用されるメソッドは、Java のリフレクション メカニズムを通じてオブジェクトをコピーすることです。このメソッドは clone() よりも効率が低い可能性があり、ディープ コピーやコレクション型のコピーはサポートされていませんが、汎用性は大幅に向上します。コピー用のコード:
コードは次のとおりです:
private <T> T getBean(T TargetBean, T SourceBean) { if (TargetBean== null) return null; Field[] tFields = TargetBean.getClass().getDeclaredFields(); Field[] sFields = SourceBean.getClass().getDeclaredFields(); try { for (Field field : tFields ) { String fieldName = field.getName(); if (fieldName.equals("serialVersionUID")) continue; if (field.getType() == Map.class) continue; if (field.getType() == Set.class) continue; if (field.getType() == List.class) continue; for (Field sField : sFields) { if(!sField .getName().equals(fieldName)){ continue; } Class type = field.getType(); String setName = getSetMethodName(fieldName); Method tMethod = TargetBean.getClass().getMethod(setName, new Class[]{type}); String getName = getGetMethodName(fieldName); Method sMethod = SourceBean.getClass().getMethod(getName, null); Object setterValue = voMethod.invoke(SourceBean, null); tMethod.invoke(TargetBean, new Object[]{setterValue}); } } } catch (Exception e) { throw new Exception("设置参数信息发生异常", e); } return TargetBean;}
以上がJavaオブジェクトのコピー例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。