7

私の質問は、実行時にクラス情報がどのように読み込まれるかです。

誰かが電話instanceofをかけたとき、それは RTTI またはリフレクションと見なされますか? それとも実際の状況に依存しますか?

4

2 に答える 2

11

RTTI」という用語は、プログラムが実行時にさまざまなオブジェクトの動的な型を決定できるようにするコア言語の機能を指す C++ 固有の用語です。通常、dynamic_castまたはtypeid演算子と、std::type_infoによって生成される関連オブジェクトを参照しtypeidます。

一方、リフレクションという用語は、プログラミング言語全体で使用される一般的な用語であり、実行時にオブジェクトや型などを検査および変更するプログラムの機能を指します。

プログラムが実行中の型を調べて、実行する一連のアクションを決定することが許可されているため、適用されると聞いた用語instanceof型のイントロスペクションであり、オブジェクトのイントロスペクションとinstanceof呼ばれることもあります。これはリフレクションよりも弱い用語だと思います。なぜなら、オブジェクトのフィールドやメソッドに関する精巧なイントロスペクションが許可されていないからです。しかし、演算子リフレクションの使用を呼ぶのが技術的に間違っているとは思いません。instanceof

あなたの他の質問について - クラス情報は実行時にどのようにロードされますか? - それは実際には JVM の実装次第です。型は最終的にクラスをシステムにロードする責任がありますClassLoaderが、JVM はこれを必要に応じて解釈できます。私はかつて JavaScript で JVM のプロトタイプを作成しましたが、内部的にはすべてのリフレクション呼び出しが、クラス、フィールド、およびメソッドを表すために配置された基盤となる JS データ構造を照会するだけでした。HotSpot JVM はまったく別のことをしていると思いますが、ほとんど実装定義です。

お役に立てれば!

于 2013-05-14T22:32:09.997 に答える