リフレクションの奇妙な動作を理解する

abhi:

私はリフレクションを理解するためにこのコードを書き、コードの動作の理由を実際に理解できなかった1つのシナリオに遭遇しました。うまくいけば、私はコミュニティからいくつかのガイダンスを受け取ります。
以下は私のテストモデルクラスです。ここでは、すべてのインスタンス化について、実行時に(リフレクションを使用して)作成されたインスタンスの正確な数を知りたいです。

public final class Model {

    private static final Model instance = new Model("Testing");
    private static int count = 0;

    private String name;

    private Model(String name) {
        this.name = name;
        ++count;
    }

    public static Model getInstance() {
        return instance;
    }

    public static int getInstanceCount() {
        return count;
    }

    public String getName() {
        return name;
    }

    public void doSomething() {
        try {
            System.out.println("Shh.... I am trying to do something");
            Thread.sleep(1000);
            System.out.println("Ok! Done.");
            return;
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
        System.out.println("Oops! I failed in doing your job...");
    }
}

このシナリオのドライバーコードは次のとおりです。

public class ReflectionTest {

    public static void main(String[] args) throws Exception {

        Model.getInstance().doSomething();
        System.out.println(Model.getInstanceCount());

        Constructor<?>[] constructor = Model.class.getDeclaredConstructors();

        for (Constructor<?> aConstructor : constructor) {
            aConstructor.setAccessible(true);
            Model m = (Model) aConstructor.newInstance("Testing through Reflection");
            System.out.println(m.getName());
            m.doSomething();
             System.out.println(m.getInstanceCount());
            //System.out.println(Model.getInstanceCount());
        }
    }
}

上記のコードの出力は次のようになります。

Shh.... I am trying to do something
Ok! Done.
0
Testing through Reflection
Shh.... I am trying to do something
Ok! Done.
1

ご覧のとおり、インスタンス数は1
でした。結果は2であると予想していましたが、テストモデルクラスのコンストラクターを次のように変更しました。countのデータ型は、以前に設定された 'int'ではなく、Integerに変更されました

    private Model(String name) {
        this.name = name;
        if (count == null)
            count = 0;
        ++count;
    }

驚いたことに、インスタンス数の正しい値を取得しています。

Shh.... I am trying to do something
Ok! Done.
1
Testing through Reflection
Shh.... I am trying to do something
Ok! Done.
2

これはばかげた質問かもしれませんが、実際に舞台裏で何が起こったのかについて考えることはできません。これについてコミュニティからのガイダンスが必要です。
前もって感謝します。

アンディ・ターナー:

これは反射とは関係ありません。

private static final Model instance = new Model("Testing");
private static int count = 0;

初期化子は順番に実行されます。そう:

private static final Model instance = new Model("Testing");

コンストラクターを実行countすると、0から1にインクリメントされます、次のようになります。

private static int count = 0;

カウントをゼロに戻します。

宣言の順序を逆にします。

private static int count = 0;
private static final Model instance = new Model("Testing");

または、初期化子を省略しますcount(デフォルト値はいずれにしてもゼロです)。

private static final Model instance = new Model("Testing");
private static int count;

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Observableコレクションに追加するときの奇妙な動作

分類Dev

奇妙な動作を処理するMFCアプリケーションの例外

分類Dev

LibGDXスクリーンショットの奇妙な動作

分類Dev

LibGDXスクリーンショットの奇妙な動作

分類Dev

アプリケーションをクラッシュさせるqDebug()の奇妙な動作

分類Dev

grailsでRestfulControllerをユニットテストするときのデフォルトのインデックスアクションでの奇妙な動作

分類Dev

さまざまな個別のポリゴンの外側にあるリーフレットマップをマスクするときの奇妙な動作

分類Dev

アクションからajaxコールバックに400レベルのエラーを送信すると、奇妙な動作が発生します

分類Dev

EntityFrameworkトランザクションとその動作を理解する

分類Dev

javascriptを使用してタスクを追加および削除するときの選択リストオプションの奇妙な動作

分類Dev

.htacces奇妙な動作をリダイレクトする

分類Dev

Gitで奇妙な動作をするPycharm(ツリーエントリのファイル名にバックスラッシュが含まれています)

分類Dev

リファクタリングのためのdjangoのリフレクションを理解する

分類Dev

Websphere Portal Serverでの奇妙なガベージコレクションの動作

分類Dev

Pythonがリストの奇妙な動作で要素のランクを取得する

分類Dev

php7.4での奇妙な動作laravel6.2コレクション

分類Dev

奇妙な動作を示す再利用可能なコレクションビューセル

分類Dev

レビュー後のアプリケーションの動作は奇妙な理由ですか?

分類Dev

PHPでの奇妙な参照/ループの動作を理解する

分類Dev

プロダクションモードでの角度のある奇妙な動作

分類Dev

マウスの速い動きで奇妙な動作をするCSS3Perspective()アニメーション

分類Dev

FirefoxでのHTMLセクションの奇妙な動作

分類Dev

JPAトランザクションが奇妙な動作をコミットする

分類Dev

リフレクションによる値の設定に関する奇妙な問題

分類Dev

Win16アプリケーションのレイアウトがWin1032ビットで奇妙に動作するのはなぜですか?

分類Dev

Golangリフレクション。値の動作

分類Dev

閉じたときに奇妙な動作をするSwiftアプリケーション

分類Dev

閉じたときに奇妙な動作をするSwiftアプリケーション

分類Dev

フレックスボックスベースのプログレスバーをアニメーション化するときの奇妙なグリッチ

Related 関連記事

  1. 1

    Observableコレクションに追加するときの奇妙な動作

  2. 2

    奇妙な動作を処理するMFCアプリケーションの例外

  3. 3

    LibGDXスクリーンショットの奇妙な動作

  4. 4

    LibGDXスクリーンショットの奇妙な動作

  5. 5

    アプリケーションをクラッシュさせるqDebug()の奇妙な動作

  6. 6

    grailsでRestfulControllerをユニットテストするときのデフォルトのインデックスアクションでの奇妙な動作

  7. 7

    さまざまな個別のポリゴンの外側にあるリーフレットマップをマスクするときの奇妙な動作

  8. 8

    アクションからajaxコールバックに400レベルのエラーを送信すると、奇妙な動作が発生します

  9. 9

    EntityFrameworkトランザクションとその動作を理解する

  10. 10

    javascriptを使用してタスクを追加および削除するときの選択リストオプションの奇妙な動作

  11. 11

    .htacces奇妙な動作をリダイレクトする

  12. 12

    Gitで奇妙な動作をするPycharm(ツリーエントリのファイル名にバックスラッシュが含まれています)

  13. 13

    リファクタリングのためのdjangoのリフレクションを理解する

  14. 14

    Websphere Portal Serverでの奇妙なガベージコレクションの動作

  15. 15

    Pythonがリストの奇妙な動作で要素のランクを取得する

  16. 16

    php7.4での奇妙な動作laravel6.2コレクション

  17. 17

    奇妙な動作を示す再利用可能なコレクションビューセル

  18. 18

    レビュー後のアプリケーションの動作は奇妙な理由ですか?

  19. 19

    PHPでの奇妙な参照/ループの動作を理解する

  20. 20

    プロダクションモードでの角度のある奇妙な動作

  21. 21

    マウスの速い動きで奇妙な動作をするCSS3Perspective()アニメーション

  22. 22

    FirefoxでのHTMLセクションの奇妙な動作

  23. 23

    JPAトランザクションが奇妙な動作をコミットする

  24. 24

    リフレクションによる値の設定に関する奇妙な問題

  25. 25

    Win16アプリケーションのレイアウトがWin1032ビットで奇妙に動作するのはなぜですか?

  26. 26

    Golangリフレクション。値の動作

  27. 27

    閉じたときに奇妙な動作をするSwiftアプリケーション

  28. 28

    閉じたときに奇妙な動作をするSwiftアプリケーション

  29. 29

    フレックスボックスベースのプログレスバーをアニメーション化するときの奇妙なグリッチ

ホットタグ

アーカイブ