JAVA新しいインスタンス参照をコピーせずにインスタンスフィールドの値を変更する方法

クラへ

クラスAがあるとしましょう

public class A {
    private int field1;
    private String field2;
    ...
}

Aの新しいインスタンスを作成し、次にAの2番目のインスタンスを作成します。

A a1 = new A();
A a2 = new A();

フィールドをコピーする簡単な方法(反射またはそう)があるa2a1インスタンスを割り当てずa2にはa1(私はインスタンスの変更参照にしたくないa1、そのフィールドの値のみ)?なんらかの方法で手動でできることは知っていますが、フィールドが多いと実用的ではありません。

反射に何か方法があるのではないかと思っていましたか?

誰かがそれを使った経験がありますか?

CLS

考慮する必要のあることがたくさんあり、要件に応じてこれを行うことができる多くの方法があります。リフレクションを使用すると、次のようなことができます

    A a1  //the original a
    A a2 = new A();  //the "duplicate"

    Field[] fields = A.class.getDeclaredFields();
    for (Field f : fields){
        f.setAccessible(true); //need that if the fields are not 
        //accesible i.e private fields
        f.get(a1);
        f.set(a2, f.get(a1));
    }

a2a1のディープコピーはありませんが、 a1の同じ参照を割り当てていることに注意してくださいつまり、クラスAに次のようなクラスBのオブジェクトフィールドがある場合

    class A { 
          B b;
    }
    class B { 
        public String myString;
    }

次に、複製a2を作成した後、bオブジェクトのmyStringを変更すると、a1とa2の両方に反映されます。これは、a1とa2の両方が同じBインスタンスを参照しているために発生します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

新しいインスタンスを作成せずにforループのクラスフィールドを変更する

分類Dev

Elasticsearchでインデックスのフィールドタイプを新しいインデックスに変更する

分類Dev

インスタンス変数を使用せずにインスタンスの戻り値を変更する

分類Dev

コンストラクターjavaを明示的に呼び出しているときにインスタンスフィールドを参照できない理由

分類Dev

すべてを変更せずに1つのReactコンポーネントのスタイルプロパティを変更する方法

分類Dev

自動スケーリング時に新しいインスタンスタグ名を変更する方法

分類Dev

Djangoのあるインスタンスから別のインスタンスにフィールドをコピーする

分類Dev

Javaで新しいインスタンスを作成せずにGUIをどのように参照しますか?

分類Dev

Ubuntu 18.04のファイルGUIで、コンピューターを再起動する可能性のあるアドオンをインストールせずにフォルダーのスペースを確認する方法はありますか?

分類Dev

フィールドの変更可能な参照を使用した変更は、元のインスタンスの移動後に反映されません

分類Dev

Project Server 2013(C#VSTOアドイン)でカスタムフィールドの値を変更する方法

分類Dev

古いコンピュータのハードドライブを新しいコンピュータにインストールしますか?

分類Dev

コピーせずにconst参照をスマートポインタに変換する

分類Dev

Golangで構造を宣言せずにインターフェースからインターフェースフィールド値を取得する

分類Dev

フィールドをタイムスタンプに変更します

分類Dev

コピーコンストラクターを介して最初にインスタンスをコピーせずにインスタンスを保持するのはなぜ良い考えではないのですか?

分類Dev

新しいコンピューターにUbuntuをインストールし、ユーザーファイルを使用して既存のHDを転送する

分類Dev

ディスク上のファイルを変更せずに、コンパイル前にGradleプロジェクトのJavaソースコードを変更するにはどうすればよいですか?

分類Dev

Golang:インターフェイスのスライスの構造体フィールド値を変更する方法

分類Dev

テラフォームでスピンしながら既存のIAMロールを新しいインスタンスに設定する方法

分類Dev

フィールドタイプを対応するインスタンスタイプに変換します

分類Dev

タイムスタンプを文字列に変換する方法(タイムゾーンを変更せずに)?

分類Dev

chownLinuxコマンドを使用してAWSインスタンス上のファイルを変更する権限をユーザー名に付与する

分類Dev

データベースモデルを変更せずにEntityFrameworkに新しいエンティティプロパティを追加する方法

分類Dev

インスタンスフィールドとしてのLinkedListと不変クラスを管理する方法?

分類Dev

新しい変数を作成せずに、別のファイルにあるクラスのインスタンスを作成します

分類Dev

Ubuntuのインストールを新しいコンピューターに移動する

分類Dev

インスタンスデータを既存のクラス参照にコピーする方法は?C#

分類Dev

URLを変更せずにフルパスネガティブパターンのRewriteRuleを作成する方法

Related 関連記事

  1. 1

    新しいインスタンスを作成せずにforループのクラスフィールドを変更する

  2. 2

    Elasticsearchでインデックスのフィールドタイプを新しいインデックスに変更する

  3. 3

    インスタンス変数を使用せずにインスタンスの戻り値を変更する

  4. 4

    コンストラクターjavaを明示的に呼び出しているときにインスタンスフィールドを参照できない理由

  5. 5

    すべてを変更せずに1つのReactコンポーネントのスタイルプロパティを変更する方法

  6. 6

    自動スケーリング時に新しいインスタンスタグ名を変更する方法

  7. 7

    Djangoのあるインスタンスから別のインスタンスにフィールドをコピーする

  8. 8

    Javaで新しいインスタンスを作成せずにGUIをどのように参照しますか?

  9. 9

    Ubuntu 18.04のファイルGUIで、コンピューターを再起動する可能性のあるアドオンをインストールせずにフォルダーのスペースを確認する方法はありますか?

  10. 10

    フィールドの変更可能な参照を使用した変更は、元のインスタンスの移動後に反映されません

  11. 11

    Project Server 2013(C#VSTOアドイン)でカスタムフィールドの値を変更する方法

  12. 12

    古いコンピュータのハードドライブを新しいコンピュータにインストールしますか?

  13. 13

    コピーせずにconst参照をスマートポインタに変換する

  14. 14

    Golangで構造を宣言せずにインターフェースからインターフェースフィールド値を取得する

  15. 15

    フィールドをタイムスタンプに変更します

  16. 16

    コピーコンストラクターを介して最初にインスタンスをコピーせずにインスタンスを保持するのはなぜ良い考えではないのですか?

  17. 17

    新しいコンピューターにUbuntuをインストールし、ユーザーファイルを使用して既存のHDを転送する

  18. 18

    ディスク上のファイルを変更せずに、コンパイル前にGradleプロジェクトのJavaソースコードを変更するにはどうすればよいですか?

  19. 19

    Golang:インターフェイスのスライスの構造体フィールド値を変更する方法

  20. 20

    テラフォームでスピンしながら既存のIAMロールを新しいインスタンスに設定する方法

  21. 21

    フィールドタイプを対応するインスタンスタイプに変換します

  22. 22

    タイムスタンプを文字列に変換する方法(タイムゾーンを変更せずに)?

  23. 23

    chownLinuxコマンドを使用してAWSインスタンス上のファイルを変更する権限をユーザー名に付与する

  24. 24

    データベースモデルを変更せずにEntityFrameworkに新しいエンティティプロパティを追加する方法

  25. 25

    インスタンスフィールドとしてのLinkedListと不変クラスを管理する方法?

  26. 26

    新しい変数を作成せずに、別のファイルにあるクラスのインスタンスを作成します

  27. 27

    Ubuntuのインストールを新しいコンピューターに移動する

  28. 28

    インスタンスデータを既存のクラス参照にコピーする方法は?C#

  29. 29

    URLを変更せずにフルパスネガティブパターンのRewriteRuleを作成する方法

ホットタグ

アーカイブ